Base64エンコーダ/デコーダ
テキストやファイルの変換をサポートし、Base64文字列を素早くエンコード/デコード
Base64とは?
Base64は、64個の印刷可能なASCII文字を使用してバイナリデータを表現するエンコーディング方式です。これらの文字には大文字・小文字、数字、いくつかの特殊記号が含まれます。Base64は、バイナリデータをテキストのみのチャネルで送信する必要がある場面で広く使用されています。たとえば、電子メールの添付ファイルやURLパラメータなどです。Base64エンコーディング方式は、RFC 4648とMIME仕様(RFC 2045)で元々定義されました。
Base64エンコーディングアルゴリズムの原理:
Base64エンコーディングプロセスは以下のステップに分けることができます:
- 入力データを3バイトずつのグループに分割
- これらの3バイト(24ビット)を6ビットずつの4つのグループに再編成
- 各6ビット値(範囲0-63)をBase64文字セットのインデックスとしてマッピング
- 最後のグループが3バイト未満の場合、0ビットで埋めて結果の最後に対応する数の等号(=)をパディングとして追加
Base64文字セット: A-Z, a-z, 0-9, +, /
パディング文字: =
変換例:
テキスト「Man」のASCIIコード: 77 97 110
バイナリ表現: 01001101 01100001 01101110
6ビットに再グループ化: 010011 010110 000101 101110
10進値: 19 22 5 46
Base64結果: T W F u
簡略化されたJavaScript実装:
// Base64 encoding implementation example (simplified)
function base64Encode(str) {
// Base64 character set
const base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
let result = '';
let i = 0;
// Process every 3 characters as a group
while (i < str.length) {
const char1 = str.charCodeAt(i++);
const char2 = i < str.length ? str.charCodeAt(i++) : 0;
const char3 = i < str.length ? str.charCodeAt(i++) : 0;
// Convert 3 8-bit bytes into 4 6-bit indices
const triplet = (char1 << 16) + (char2 << 8) + char3;
// Extract 4 6-bit values from the triplet
const index1 = (triplet >> 18) & 0x3F;
const index2 = (triplet >> 12) & 0x3F;
const index3 = (triplet >> 6) & 0x3F;
const index4 = triplet & 0x3F;
// Add padding based on the original data length
if (i - 3 > str.length) {
result += base64chars[index1] + base64chars[index2] + '==';
} else if (i - 2 > str.length) {
result += base64chars[index1] + base64chars[index2] + base64chars[index3] + '=';
} else {
result += base64chars[index1] + base64chars[index2] + base64chars[index3] + base64chars[index4];
}
}
return result;
}
一般的な使用用途:
- 電子メール添付ファイルのエンコーディング(MIME標準)
- URLでのデータの安全な送信(Base64url変種を使用し、'+'と'/'を'-'と'_'に置き換え)
- HTMLやCSSにバイナリ画像を埋め込む(データURIスキーム)
- 単一の文字列として単純なデータを格納する(JWTトークンコンポーネントなど)
- XMLやJSONにバイナリデータを含める(特殊文字のエスケープ問題を回避)
高度な機能
16進形式サポート
当ツールは16進形式の入力と出力をサポートしており、プログラムコードでバイナリデータを扱う開発者に便利です。
- 入力:0x11,0x22,0x33またはシンプルな112233形式を受け付け
- 出力:デコードしたBase64を16進形式に戻してコードに埋め込み
文字セットサポート
異なる文字セットは、テキストを異なる方法でバイトにエンコードします。当ツールは様々なテキストエンコーディングを処理するために複数の文字セットをサポートしています:
- UTF-8: すべてのUnicode文字をサポートする汎用エンコーディング(デフォルト)
- ASCII: 基本的な英語文字をサポートする7ビットエンコーディング(0-127)
- Latin-1 (ISO-8859-1): 西欧文字をサポートする8ビットエンコーディング(ISO-8859-1)
- UTF-16: WindowsとJavaで一般的に使用される16ビットエンコーディング(リトルエンディアン)
重要な注意点:
- Base64エンコードされたデータは通常、元のデータより約33%大きくなります(3バイトが4文字になるため)
- Base64は暗号化アルゴリズムではなく、単なるエンコード方法であり、セキュリティは提供しません
- 大きなファイルのBase64エンコードは、かなりのメモリと処理時間を消費する可能性があります
- URL安全Base64変種は、URLエンコーディングの問題を避けるために異なる文字セットを使用します
- 標準Base64には行の長さを制限するための改行が含まれる場合があり、一部のアプリケーションでは追加の処理が必要です
Base64と他のエンコーディングの比較:
| エンコード方式 | 特徴 | 主な用途 |
|---|---|---|
| Base64 | 64のASCII文字を使用してバイナリデータを表現 | 電子メール添付ファイル、テキストでのバイナリデータ送信 |
| URLエンコーディング | 特殊文字を%XX形式に変換 | URLパラメータの受け渡し、フォーム送信 |
| 16進エンコーディング | 各バイトを2つの16進文字で表現 | ハッシュ値の表現、バイナリデータの可視化 |
Base64についての詳細な公式情報については、次のリソースを参照してください: RFC 4648(Base64標準) | Wikipedia: Base64 | RFC 2045(MIME仕様)