必要なツールを、すぐ使えるように

Base64エンコード・デコード

元の文字の欄に文字を入れるとBase64の欄にすぐエンコードされ、Base64の欄に値を貼り付けると元の文字に戻ります。Authorization: Basicヘッダー、メール件名の=?ISO-2022-JP?B?…?=、data: URLのように包まれた値もそのまま読み、文字コード(UTF-8・Shift_JIS・UTF-16)も自動で判定します。下には、3バイトが4文字になるグループとビット、他のツールと結果が変わる理由も表示します。

最終更新 2026-10-21計算はブラウザ内だけで処理
例

元の文字
Base64

    グループレール

    3バイトがBase64の4文字になるグループです。矢印キーでグループを選ぶと、拡大表示にビットが出ます。
    グループ拡大

    同じ文字でも違うBase64他のツールと結果が違うとき · 押すとコピー

      最終更新 2026-10-21入力値は保存しません

      ROBERINの基準必要なツールを、
      すぐ使えるように。
      • ひと目で分かる画面入力と結果の位置をはっきり分けます。
      • 結果が先主要な結果を先に示し、過程は必要なときだけ。
      • 求めない登録や不要な入力なしですぐ使えます。

      Base64は3バイトを4文字に書き換える方式です

      Base64エンコードは、データを3バイト(24ビット)ずつにまとめ、6ビットずつ4つに分けたうえで、0~63の番号をA~Z、a~z、0~9、+、/ の64文字のどれかで書き表す方式です。そのため、3バイトは必ず4文字になり、結果は元のデータより約33%長くなります。日本語はまずUTF-8のバイトに変換されるので、「こんにちは 👋」は20バイトで、Base64では末尾に=が1つ付いた28文字の 44GT44KT44Gr44Gh44GvIPCfkYs= になります。Base64は暗号化ではないため、誰でもそのまま元に戻せます。

      上のツールでは、元の文字の欄もBase64の欄も編集できます。元の文字を直すとエンコードされ、Base64の欄に値を貼り付けるとデコードされます。Authorization: Basic ヘッダー、メール件名の =?ISO-2022-JP?B?…?=、data: URL、PEM証明書、PowerShellの -EncodedCommand のように包まれた値も、そのまま貼り付ければ包みを外して読みます。UTF-8として読めないバイトは、Shift_JISやUTF-16などの別の文字コード、またはPNG・PDFなどのファイルとして判別します。判定経路には変換が通った段階が、グループレールと拡大表示には3バイトが4文字に変わる位置が表示されます。

      Base64を自分で解く・作る場面

      • HTTP Basic認証のヘッダーを確認するとき: RFC 7617では、ユーザーID、コロン(:)、パスワードをつなげてBase64にしたものを Authorization: Basic の後ろに付けて送ります。たとえば admin:1234 は YWRtaW46MTIzNA== です。つまり、このヘッダーを見た人は誰でもパスワードを読めるため、Basic認証はHTTPSの上でだけ使うべきです。
      • メールの件名が =?ISO-2022-JP?B?…?= のように見えるとき: メールのヘッダーにはASCII文字しか使えないので、日本語の件名はRFC 2047のencoded-wordで書かれます。たとえば「【ロベリン】商品を発送しました」は =?ISO-2022-JP?B?GyRCIVolbSVZJWolcyFbPiZJSiRySC9BdyQ3JF4kNyQ/GyhC?= になります。1つ目と2つ目の?の間のISO-2022-JPは文字コード、Bは「Base64」の印です。日本のメールでは今もISO-2022-JPが多く、中身はエスケープシーケンス(1B 24 42)で始まる7ビットのバイトなので、UTF-8で読んでも正しく表示されません。ヘッダーの値ごと貼り付けると、書かれた文字コードで読み取ります。
      • 設定値やKubernetes Secretを読むとき: Kubernetes Secretのdataフィールドの値はBase64でエンコードした文字列でなければならず、エンコードしたくない場合はstringDataフィールドを使います。取り出した値の中身の確認や、設定に入れるBase64の作成に使います。
      • JSONに画像やPDFなどのファイルを入れるとき: 文字しか受け付けない形式にファイルのバイトを入れるとき、Base64がよく使われます。Base64の欄に貼り付けた値が文字ではない場合、このツールは形式とサイズを表示し、ファイルとして保存できるようにします。
      • JWTの中身を見るとき: JWTをドット(.)で分けた各部分は、URL-safeの文字を使い末尾の=を省いたBase64url(RFC 7515)です。ヘッダーとペイロードはここでも解けますが、署名は検証しません。
      • PowerShellの -EncodedCommand の値を作る・確認するとき: PowerShellのドキュメントによると、この値はUTF-16LEの文字列をBase64にしたものでなければなりません。同じ Get-Date でも、UTF-8なら R2V0LURhdGU=、UTF-16LEなら RwBlAHQALQBEAGEAdABlAA== と、まったく違う値になります。
      • 証明書・鍵のファイル(PEM)を扱うとき: -----BEGIN CERTIFICATE----- の間の本文はBase64で、RFC 7468に従い1行を64文字で折り返します。本文を解くと、DER形式のバイトが出てきます。

      使い方

      1. エンコード: 元の文字の欄に文字を入れるか、「ファイルを入れる」でファイルを選びます。元の文字の欄にファイルをドロップしたり貼り付けたりしてもかまいません。Base64の欄にすぐ結果が出ます。
      2. デコード: Base64の欄に値を貼り付けます。前後に引用符やヘッダー名が付いていても大丈夫です。元の文字の欄に文字が出ます。文字ではない場合は、形式とサイズを示したファイルカードが出ます。
      3. 形を選ぶ: 操作パネルで、標準(+ /)かURL-safe(- _)、=あり・なし、1行・76文字・64文字の折り返しを選びます。貼り付けた値の形は操作パネルにそのまま反映されるため、解いた文字を直しても同じ形で作り直されます。
      4. 文字コード: 初期値は自動判定です。解いた文字がおかしいときは、UTF-8、Shift_JIS、UTF-16LEなどの文字コードを自分で選びます。1行に値が1つずつ複数入っている場合は、「1行ずつ別々に」をオンにします。
      5. 確認: 判定経路で、外した包み、無視した空白、補ったパディングを確認します。レールのグループを押すと、拡大表示にそのグループのビットが出ます。他のツールと結果が違う場合は、「同じ文字でも違うBase64」の一覧で原因を探し、行を押すとその値をコピーできます。

      3バイトが4文字になる規則

      「あ」のUTF-8のバイト E3 81 82 を例にします。3バイトをつなぐと24ビットになり、これを6ビットずつ区切ると、0~63の番号が4つ出ます。その番号を下の文字表で探して書くと、44GC になります。

      「あ」(E3 81 82)をBase64にする過程
      段階1バイト目2バイト目3バイト目
      バイトE38182
      8ビットずつ111000111000000110000010
      6ビットずつ111000 · 111000 · 000110 · 000010
      番号56 · 56 · 6 · 2
      文字4 · 4 · G · C

      データの末尾が3バイトで割り切れない場合は、足りないビットを0で埋めて文字を作り、空いた位置は=で表します。バイトが1つ余ると文字2つと==、2つ余ると文字3つと=が付きます。RFC 4648は、エンコーダーが埋めるビットを0にするよう定めており、0ではない値はデコーダーが拒否してもよいとしています。

      末尾に余るバイト数とパディング(RFC 4648 10節の例と同じ方式)
      元の文字バイトBase64=なし
      Man3TWFuTWFu
      Ma2TWE=TWE
      M1TQ==TQ
      😀48J+YgA==8J+YgA
      Base64の文字表: 番号 = 行 + 列(62・63番はURL-safeでは - _)
      +0+1+2+3+4+5+6+7
      0ABCDEFGH
      8IJKLMNOP
      16QRSTUVWX
      24YZabcdef
      32ghijklmn
      40opqrstuv
      48wxyz0123
      56456789+ / -/ / _

      Base64の長さの計算

      パディングを付けるとBase64の長さは 4 × ⌈n ÷ 3⌉(n = バイト数)で、パディングを省くと ⌈4n ÷ 3⌉ です。長さを決めるのは文字数ではなくバイト数です。日本語のひらがなや漢字はUTF-8で1文字3バイトなので、同じ文字数なら英数字の3倍ほどBase64が長くなります。メールのように76文字ごとにCRLFの改行を入れると、1行ごとに2文字増えます。

      元のサイズ別のBase64の長さ(文字数)
      元のデータバイト=あり=なし76文字改行(CRLF)増加率
      Hello587860%
      こんにちは 👋2028272840%
      100バイト10013613413836%
      1 KiB1,0241,3681,3661,40233.6%
      1 MiB1,048,5761,398,1041,398,1021,434,89633.3%
      5 MiB(ファイル上限)5,242,8806,990,5086,990,5077,174,46833.3%

      標準・URL-safe・MIME・PEMの違い

      名前は違っても、3バイトを4文字に変える計算は同じです。違うのは、62・63番の文字、末尾の=、折り返しの3点だけです。

      Base64の形式の比較
      形式62・63番末尾の=折り返し主な用途根拠
      標準+ /ありなし一般のデータ、data: URL、Basic認証RFC 4648 4節
      URL-safe- _ありまたはなしなしURLやファイル名に入れる値RFC 4648 5節
      JWT(Base64url)- _なしなしJWT・JWSの3つの部分RFC 7515 2節
      MIME(メール)+ /あり1行76文字以下メール本文・添付ファイルRFC 2045 6.8節
      PEM+ /あり1行64文字(最終行を除く)証明書・鍵のファイルRFC 7468 2節
      GNU base64コマンド+ /あり初期値は76文字、-w 0 なら1行Linuxのコマンドラインcoreutilsのマニュアル

      デコードの規則も少しずつ違います。RFC 4648はアルファベット外の文字が混じっていたら拒否するよう定めていますが、メール用のRFC 2045は改行や表にない文字を無視するよう定めています。ブラウザの atob() は空白だけを取り除き、- や _ があるとエラーにします(WHATWG forgiving-base64)。このツールは、改行と空白を無視し、URL中の%2B・%2F・%3DとJSON文字列の\n表記を元の文字に戻し、標準とURL-safeの文字をどちらも受け付けます。それ以外の文字は位置を示して停止します。

      同じ文字でも文字コードごとに違うBase64

      Base64はバイトを文字で書き表す方法にすぎないので、文字をどんなバイトに変えたか(文字コード)によって結果が変わります。英字のHelloはUTF-8でもShift_JISでもバイトが同じなのでBase64も同じですが、日本語は文字コードごとにまったく違う値になります。UTF-8で書かれたバイトをShift_JISで読むと、たとえば「こんにちは」が「縺薙s縺ォ縺。縺ッ」のようになります。これが文字化けの典型的な姿です。

      同じ文字の文字コード別Base64(=あり)
      文字UTF-8Shift_JISUTF-16LEUTF-16BE
      こんにちは44GT44KT44Gr44Gh44GvgrGC8YLJgr+CzQ==UzCTMGswYTBvMA==MFMwkzBrMGEwbw==
      日本語5pel5pys6Kqek/qWe4zq5WUsZ56KZeVnLIqe
      HelloSGVsbG8=SGVsbG8=SABlAGwAbABvAA==AEgAZQBsAGwAbw==
      RésuméUsOpc3Vtw6k=なし(é)UgDpAHMAdQBtAOkAAFIA6QBzAHUAbQDp

      自動判定は、まず先頭のバイトでPNG・JPEGなどのファイルかどうかを確かめます。次に、① メール件名・data: URL・PowerShellのように文字コードが書かれている、または決まっている値、② 先頭のBOM(EF BB BF、FF FE、FE FF)、③ ASCII文字ごとに00が挟まるUTF-16の形、④ UTF-8の順に、制御文字なしで読めるかを見ます。それでも読めなければ、EUC-KR・Shift_JIS・Windows-1252と00のないUTF-16ですべて読んでみて、その文字コードらしい文字(かな・漢字、ハングル、アクセント付きのラテン文字)で最もよく埋まる結果を選びます。同点なら、ページの言語の文字コード(日本語ページではShift_JIS)を優先します。バイトだけでは文字コードを確定できないため、結果が不自然なときは操作パネルで直接選んでください。

      貼り付けた値の包みと、ツールが外すもの

      コピーした値には、Base64の前後にヘッダー名や形式の印が付いていることがよくあります。下の形は、包みを外して中のBase64だけを読み、元の文字を直すと同じ包みで作り直します(署名が必要なJWTは除きます)。判定経路の「包みを維持」のチップにある×ボタンで、包みを外すこともできます。

      ツールが認識する包み
      形例処理
      Basic認証Authorization: Basic cm9i…UTF-8として先に読む
      メール件名=?ISO-2022-JP?B?GyRC…?=書かれた文字コードで読み、複数の語は連結し、作り直すときは1語75文字以下に分ける
      data: URLdata:image/png;base64,iVBOR…形式とcharsetを反映、;base64がなければBase64ではないと通知
      PEM-----BEGIN CERTIFICATE-----本文だけを読み、64文字の折り返しを維持
      PowerShellpowershell -EncodedCommand RwBl…UTF-16LEとして読む
      JWT・BearereyJhbGci….eyJzdWIi….署名ヘッダーとペイロードを行に分けて解き、署名は読み飛ばす
      引用符・Python"SGVsbG8="、b'SGVsbG8='引用符だけを外す
      URL内の%XXSGVsbG8%3D%2B・%2F・%3Dを +・/・= に戻す
      JSON内の \n 表記MIIB…\nMIIC…改行とみなして無視

      解けないとき、エラー別の原因

      Base64の欄の値を読めないときは、ステータス行に何文字目で止まったかと、その周辺の文字が表示されます。元の文字の欄は薄く残り、最後に読めた結果を見せます。

      エラーと警告
      状態例原因直し方
      Base64にない文字SGVs bG8!!、:、日本語などの文字が混じっている説明文や記号を除いて値だけを入れる
      文字数が合わないSGVsb4文字のグループで1文字だけが余っているコピー時に欠けた、または余分に付いた文字がないか確認
      =の数が合わないSGVsbG8==この長さでは=は1個が正しい=を1つ減らす
      =の後に文字が続くSGVsbG8=V29ybGQ=値が2つつながっている行を分けて「1行ずつ別々に」をオンにする
      末尾のビットが0ではない(警告)SGVsbG最後の文字の余りビットが0ではなく、末尾が欠けた可能性がある(解くとHell)元データの末尾を確認
      UTF-8として読めないgrGC8YLJgr+CzQ==Shift_JISなど、別の文字コードのバイト自動判定の結果を見るか、文字コードを直接選ぶ
      ファイルと判断iVBORw0KGgo…文字ではないバイト(この例はPNGのシグネチャ)ファイルカードで保存

      他のツールと結果が違うとき

      同じ文字を入れたのにBase64が違うなら、ほぼ必ずバイトが違うか、形の設定が違います。ツールの下にある「同じ文字でも違うBase64」の一覧が、今の元の文字で次のケースを計算し直し、最初の違いから表示します。

      結果が変わりやすい原因
      原因元の文字結果の違い
      echoが付ける末尾の改行helloprintf では aGVsbG8=、echo では aGVsbG8K
      改行のLFとCRLF1行目 ↵ 2行目LF MeihjOebrgoy6KGM55uu、CRLF MeihjOebrg0KMuihjOebrg==
      文字コードこんにちはUTF-8 44GT44KT44Gr44Gh44Gv、Shift_JIS grGC8YLJgr+CzQ==
      標準とURL-safe😀8J+YgA==、8J-YgA==
      パディングHelloSGVsbG8=、SGVsbG8
      折り返し長いファイルGNU base64 は76文字ごとに改行、-w 0 なら1行
      デコーダーの寛容さZm9v-_Pythonの b64decode() は初期設定で - _ を捨てて b'foo' だけを残し、このツールはURL-safeの文字として読む

      コードで行うとき

      ブラウザの btoa() は、1バイトに収まらない文字があるとInvalidCharacterErrorを出します。日本語はまずUTF-8のバイトに変換してからエンコードする必要があります。新しい Uint8Array.prototype.toBase64() は、Chrome 140、Firefox 133、Safari 18.2以降で使えます。

      // JavaScript: 日本語はUTF-8のバイトに変換してからエンコード(短い文字列)
      const bytes = new TextEncoder().encode('こんにちは');
      const b64 = btoa(String.fromCharCode(...bytes));          // 44GT44KT44Gr44Gh44Gv
      const back = new TextDecoder().decode(Uint8Array.from(atob(b64), c => c.charCodeAt(0)));
      bytes.toBase64({ alphabet: 'base64url', omitPadding: true }); // 新しいAPI
      
      # Python
      import base64
      base64.b64encode('こんにちは'.encode('utf-8'))   # b'44GT44KT44Gr44Gh44Gv'
      base64.b64decode('SGVsbG8')                      # =なしで終わるとbinascii.Error: Incorrect padding
      base64.b64decode('Zm9v-_', validate=True)        # アルファベット外の文字を捨てずにエラー
      
      # コマンドライン
      printf '%s' 'こんにちは' | base64    # echoは末尾に改行を付ける
      base64 -w 0 report.pdf              # GNU: 折り返しなし(macOSのbase64は初期値が1行、-b 76で折り返し)

      よくある間違い

      • Base64を暗号化だと思う: 鍵がなくても誰でも元に戻せます。パスワードやトークンをBase64にしても、隠したことにはなりません。
      • echoで作った値をそのまま使う: echo は末尾に改行を付けるので、結果の末尾が K や o= のように変わります。printf '%s' か echo -n を使います。
      • 大文字と小文字を変える: Base64は大文字と小文字を別の文字として読みます。表記をそろえようとして変えると、別のデータになるか、解けなくなります。
      • URLのクエリに標準Base64をそのまま入れる: フォームデータの解釈では + が空白に変わり、/ と = もURLの中で意味を持ちます。URL-safeを使うか、パーセントエンコードをします。
      • 二重にエンコードする: 解いた結果がまたBase64のように見えるときは、ステータス行の横に「もう一度デコード」が出ます。
      • 画像のBase64でdata: の頭を忘れる: HTMLやCSSに入れるときは data:image/png;base64, の頭が必要です。画像なら、画像 ↔ Base64変換ツールがHTML・CSSの形まで作ってくれます。

      制限事項

      • ファイルは5MBまで入れられます(Base64で約700万文字)。欄の文字が40万文字を超えると前後だけが表示され、コピーと保存には全体が入ります。
      • 自動判定は、バイトの形から推測した結果です。短い値は複数の文字コードで読めてしまうため、間違えることがあります。
      • 作れる文字コードは、UTF-8、UTF-16LE・BE、EUC-KR(CP949)、Shift_JIS、Windows-1252です。メール件名に書かれたISO-2022-JPのような文字コードは読み取り専用で、解いた文字を直すとUTF-8で作り直されます。
      • JWTの署名は検証せず、メール件名のQエンコード(=?…?Q?…?=)は解きません。
      • ブラウザの文字欄は改行をLFに変えるため、元の文字の欄の改行はLFでエンコードされます。CRLFが必要なときは、「同じ文字でも違うBase64」のCRLFの行をコピーします。
      • グループレールは先頭の480グループ(1,440バイト)まで描画します。残りも変換とコピーには含まれます。
      • 変換はこのブラウザの中だけで行い、入れた値をサーバーに送ったり、URLやストレージに残したりしません。

      出典

      基準: Base64の形式はRFC 4648、メール・PEM・認証ヘッダー・JWTの使われ方は各RFC、ブラウザの動作はWHATWGの標準とMDN、コマンドラインと言語ごとの動作は各ドキュメントを、2026年10月21日に確認しました。表の値は、このツールとPython 3.14のbase64モジュールで同じ結果になることを確認しています。

      よくある質問

      Base64は暗号化ですか?

      いいえ。Base64はバイトを64種類の文字で書き換えるエンコードにすぎず、鍵がなくても誰でも元の値に戻せます。たとえばBasic認証ヘッダーの YWRtaW46MTIzNA== は、解くとそのまま admin:1234 になります。パスワードやトークンを守るには、HTTPSと本物の暗号化が必要です。

      同じ日本語なのに、サイトによってBase64の結果が違うのはなぜですか?

      ほとんどの場合、バイトが違うからです。「こんにちは」はUTF-8では 44GT44KT44Gr44Gh44Gv、Shift_JISでは grGC8YLJgr+CzQ==、UTF-16LEでは UzCTMGswYTBvMA== です。ほかにも、echoが付ける末尾の改行(hello → aGVsbG8K)、CRLFとLF、URL-safeの文字、末尾の=の省略、76文字ごとの改行でも結果が変わります。ツールの下の「同じ文字でも違うBase64」で、これらを並べて確認できます。

      末尾の=は何ですか。外してもいいですか?

      =は、最後のグループが3バイトに満たないときに4文字にそろえるパディングで、元のデータの一部ではありません。バイトが1つ余ると==、2つ余ると=が付きます。JWTのように=を省くと決めている形式もあれば、そうでない場面もあるため、受け取る側の規則に合わせてください。このツールは=があってもなくても読めます。

      Base64の長さはどう計算しますか?

      パディングありなら 4 × ⌈バイト数 ÷ 3⌉、なしなら ⌈4 × バイト数 ÷ 3⌉ です。5バイトのHelloは8文字、20バイトの「こんにちは 👋」は28文字、1MiB(1,048,576バイト)は1,398,104文字で、約33%長くなります。76文字ごとにCRLFの改行を入れると、1行につき2文字増えます。

      デコードしたら文字化けしました。どうすればいいですか?

      元のバイトがUTF-8ではない可能性が高いです。このツールは、UTF-8で読めないとShift_JISなどの古い文字コードやUTF-16で読み直します。それでもおかしいときは、操作パネルの文字コードでUTF-8、Shift_JIS、UTF-16LE、EUC-KR、Windows-1252を選んで比べてください。たとえばUTF-8のバイトをShift_JISで読むと、「こんにちは」は「縺薙s縺ォ縺。縺ッ」のようになります。

      URLに入れるBase64は、どの形式で作ればいいですか?

      URL-safe形式が安全です。標準Base64の + はフォームデータの解釈で空白に変わり、/ と = もURLの中で意味を持つからです。URL-safeは62・63番の文字を - と _ に置き換えた形式(RFC 4648 5節)で、受け取る側が=を嫌う場合は「=なし」も一緒に選びます。

      メール件名の =?ISO-2022-JP?B?…?= のような値はどう読みますか?

      RFC 2047のencoded-wordです。最初の?の間が文字コード、Bが「Base64」の印、その後ろがBase64の本文です。値ごとBase64の欄に貼り付けると、書かれた文字コード(ISO-2022-JPやUTF-8など)で解き、複数の語に分かれた件名は連結します。Qと書かれた値はBase64ではないため、解きません。

      Base64にした画像やPDFをファイルに戻せますか?

      はい。Base64の欄に貼り付けた値が文字ではない場合、先頭のバイトからPNG、JPEG、PDF、ZIPなどの形式を判別してファイルカードに表示し、「ファイルに保存」でダウンロードできます。逆に、「ファイルを入れる」で5MBまでのファイルをBase64に変換できます。変換はブラウザの中だけで行い、サーバーには送りません。