Base64 エンコーダーへ移動

RFC 4648 · エンコーダー&デコーダー

なんでも Base64 エンコード。アップロードは一切なし。

テキスト・ファイル・画像に対応した無料のオンライン Base64 エンコーダー・デコーダーです。処理はすべてお使いのブラウザのタブ内で JavaScript が行います。何もアップロードされないので、オフラインでも動作し、サイズ制限もありません。

  • 入力と同時にエンコード
  • テキスト・ファイル・画像
  • URL セーフ&MIME モード
  • 広告なし・登録不要
0 文字 · 0 B
0 文字 · 0 B
オプション
エンコードの種類

Ctrl+Enter エンコード Ctrl+Shift+C 結果をコピー Ctrl+Shift+X 方向を反転

Base64 エンコードをオンラインで — 無料・即時・プライベート

このオンライン Base64 エンコードツールは、サーバーではなくお使いのブラウザで処理を行います。上の入力欄に入力すると、そのまま Base64 が表示されます。ボタンもページの再読み込みもアップロードも不要です。デコードに切り替えれば逆変換ができ、ファイル・画像タブを開けば画像を Base64 エンコードして、HTML や CSS にそのまま貼れるデータ URI を取得できます。

標準仕様の機能はすべてそろっています。標準アルファベット、URL セーフ Base64(RFC 4648 §5)、MIME の 76 文字改行、LF と CRLF の改行コード、行ごとのエンコード、そして UTF-8 から ISO-8859-1、UTF-16 までの 6 種類の文字コードです。ブラウザではなくコードで Base64 エンコードしたい場合は、下のコード例で Python、JavaScript、Linux と macOS、PowerShell、PHP、Java、Go、C#、Ruby を紹介しています。

最終更新日

選ばれる理由

違いは「どこでエンコードするか」。

多くの Base64 ツールは、ファイルをサーバーに送信してそこでエンコードし、ダウンロードリンクを返します。つまり、ブラウザならマイクロ秒で終わる変換のために、データがあなたのマシンの外に出てしまいます。このツールはそのような通信を一切行いません。

この Base64 エンコーダーと一般的なサーバー型オンライン Base64 ツールの機能比較
項目 freebase64encode.com 一般的なオンラインエンコーダー
データの処理場所 常にお使いのブラウザのタブ内 サーバーにアップロード
ファイルサイズの上限 デバイスのメモリのみ 通常は 100 MB まで
サーバーへのファイル保存 なし(送信先が存在しない) 一時保存後に削除
オフラインでの動作 ページ読み込み後は動作 不可
入力中のリアルタイム変換 標準でオン 任意設定またはボタン操作
エンコードとデコード 1 ページでワンクリック切り替え 別々のページ
画像 → データ URI + HTML/CSS/Markdown プレビュー付きで内蔵 なし
9 言語のコード例 同じページに掲載 なし
サイズ増加の表示 バイト数と % をリアルタイム表示 表示なし
広告と Cookie バナー なし(追跡 Cookie もなし) たいていあり

コードで実行

Python、JavaScript、Bash、PowerShell ほか 5 言語で Base64 エンコード。

よく検索される言語で、エンコードとデコードのコードをそのままコピーして使えます。誰もがつまずきがちな落とし穴も、それぞれに書き添えました。

Python で Base64 エンコード

Python は標準ライブラリに Base64 を備えています。つまずきやすいのは、b64encode が str ではなく bytes を受け取る点です。テキストはまず UTF-8 にエンコードしてください。

import base64

# Encode a string ─ note the .encode("utf-8"): b64encode takes bytes, not str
text = "Man is distinguished"
encoded = base64.b64encode(text.encode("utf-8")).decode("ascii")
print(encoded)                       # TWFuIGlzIGRpc3Rpbmd1aXNoZWQ=

# Decode it back
decoded = base64.b64decode(encoded).decode("utf-8")

# URL-safe, unpadded (RFC 4648 §5) ─ the JWT flavour
base64.urlsafe_b64encode(b"data").rstrip(b"=")

# Encode a file, wrapped at 76 characters for MIME
with open("photo.png", "rb") as f:
    mime = base64.encodebytes(f.read()).decode("ascii")

# Build a data URI for an image
uri = "data:image/png;base64," + base64.b64encode(open("photo.png", "rb").read()).decode()

仕組み

Base64 エンコードの仕組み。

Base64 は任意のバイト列を、どのシステムでも扱える 64 種類の文字で書き直します。3 バイト(24 ビット)を取り出し、6 ビットずつ 4 つのグループに切り分けます。各グループはアルファベット A–Z a–z 0–9 + / のインデックスになります。3 バイトが必ず 4 文字になるため、出力はちょうど 3 分の 1 大きくなります。

変換の具体例: Man → TWFu

テキスト Man
ASCII 7797110
ビット列 01001101 01100001 01101110
6 ビットずつ分割 010011 010110 000101 101110
インデックス 19 · 22 · 5 · 46
Base64 TWFu

入力の長さが 3 の倍数でない場合、出力が 4 の倍数になるよう最後のグループを = で埋めます。1 バイト余れば ==、2 バイト余れば = になります。

Base64 エンコードの例

よく使われる文字列を UTF-8 として Base64 エンコードした結果です。上のツールに貼り付けて確かめてみてください。

文字列の例とその Base64 エンコード結果
入力 Base64 補足
Hello, World! SGVsbG8sIFdvcmxkIQ== 13 バイトで 1 バイト余るため = が 2 つ
Hello World SGVsbG8gV29ybGQ= 11 バイトなので = が 1 つ
hello aGVsbG8=
base64 YmFzZTY0 6 バイトは 3 で割り切れるのでパディングなし
user:password dXNlcjpwYXNzd29yZA== HTTP Basic 認証ヘッダーの値
héllo 🎉 aMOpbGxvIPCfjok= UTF-8 では é が 2 バイト、絵文字が 4 バイト
{"alg":"HS256","typ":"JWT"} eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 JWT ヘッダー(URL セーフ、パディングなし)

Base64 のアルファベット(変換表)

0 から 63 までの 6 ビットの値が、それぞれ 1 文字に対応します。URL セーフ版のアルファベットも同じですが、62 が -、63 が _ になります。= はパディングで、アルファベットには含まれません。

Base64 変換表:値 0〜63 と対応する文字
値 文字 値 文字 値 文字 値 文字
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

Base64 の種類の比較

「Base64」にはいくつかの種類があります。62 個の英数字は共通で、最後の 2 文字、パディング、改行の扱いが異なります。上のツールは最初の 3 種類を出力できます。

Base64 の種類の比較:標準、URL セーフ、MIME、PEM
種類仕様62 / 63 番の文字パディング改行主な用途
標準 RFC 4648 §4 + / 必須 なし 汎用、JSON、データ URI
URL セーフ(base64url) RFC 4648 §5 - _ 通常は省略 なし JWT、URL、ファイル名
MIME RFC 2045 + / 必須 76 文字ごとに CRLF メールの添付ファイル
PEM RFC 7468 + / 必須 64 文字ごと、BEGIN/END 付き TLS 証明書、鍵

Base64 が使われる場面

メールの添付ファイル

SMTP は 7 ビットのテキスト向けに設計されました。MIME(RFC 2045)は添付ファイルを Base64 エンコードし、76 文字ごとに改行することで、メールサーバーを変更なしで通過させます。

データ URI

data:image/png;base64,… を使うと、小さな画像やフォント、SVG を HTML や CSS に直接埋め込み、リクエストを 1 回減らせます。数 KB 以下なら効果的ですが、それを超えると 33% の増加とキャッシュが効かないデメリットのほうが大きくなります。

JSON・XML のデータ

どちらの形式も任意のバイト列は扱えません。Base64 ならファイルを、どの JSON パーサーでも扱えるただの文字列に変換できます。REST API でバイナリを送るときの定番です。

JWT と URL

JSON Web Token は base64url(+ と / の代わりに - と _ を使い、パディングを省いた RFC 4648 §5 の形式)を使うため、トークンを URL や Cookie、ヘッダーに安全に入れられます。

HTTP Basic 認証

Authorization: Basic の中身は base64(ユーザー名:パスワード) そのものです。暗号化ではなく単なるエンコードなので、Basic 認証は HTTPS 上でしか使ってはいけません。

設定ファイルとシークレット

Kubernetes の Secret、PEM 形式の TLS 証明書、SSH 鍵は、いずれもバイナリを Base64 で保存しています。これによりファイルは読めて、差分が取れて、コピーしやすいテキストのままになります。

よくある 6 つの落とし穴

Base64 は暗号化ではない

誰でもコマンド 1 つでデコードできます。パスワードや API キー、個人情報を隠す目的には絶対に使わず、本物の暗号化を使ってください。

文字コードの不一致で文字化けする

Base64 がエンコードするのはバイト列で、テキストは文字コードを決めて初めてバイト列になります。UTF-8 でエンコードして Latin-1 でデコードすると文字化けします。両側とも UTF-8 にそろえましょう。

echo は改行を付け足す

echo "hi" | base64 は 2 バイトではなく 3 バイトをエンコードします。echo が \n を付け足すためです。入力したとおりにエンコードするには printf %s を使います。

改行で文字列が変わる

MIME の出力には 76 文字ごとに CRLF が入ります。多くのデコーダーは空白を無視しますが、「同じはず」の 2 つの文字列を厳密に比較したりハッシュを取ったりすると、片方が改行されているだけで一致しません。

+ と / は URL で壊れる

フォーム形式でクエリ文字列をデコードすると + は空白になり、/ はパスを区切ってしまいます。値を URL やファイル名に入れるときは必ず URL セーフ版を使いましょう。

データが 3 分の 1 増える

3 バイトごとに 4 文字になります。大きなファイルを Base64 にして JSON に入れると、送受信の両側で帯域とメモリを余計に消費します。その場合は multipart/form-data で送りましょう。

よくある質問

Base64 エンコードの疑問に回答。

Base64 エンコードとは何ですか?

Base64 は、バイナリデータを 64 種類の印字可能な ASCII 文字(A–Z、a–z、0–9、+、/)で表すバイナリ・テキスト変換方式です。メール本文、JSON や XML の文書、HTTP ヘッダー、URL、HTML 属性など、テキスト用に作られた経路でバイナリデータを安全に送るために使われます。Base64 は暗号化ではなくエンコードです。誰でもデコードできるため、機密性はありません。

テキストをオンラインで Base64 エンコードするには?

このページの入力欄にテキストを貼り付けるか入力してください。結果はすぐに出力欄に表示されます。エンコードは入力に合わせてブラウザ内で行われるので、ボタンを押す必要もページの再読み込みもありません。コピーボタンか Ctrl+Shift+C で Base64 文字列をクリップボードにコピーできます。

文字列を Base64 エンコードするには?

文字列はまず文字コード(ほとんどの場合 UTF-8)でバイト列に変換され、そのバイト列が Base64 エンコードされます。このページではこれが自動で行われるので、文字列を入力して結果をコピーするだけです。たとえば "Hello, World!" を Base64 エンコードすると SGVsbG8sIFdvcmxkIQ== になります。主要な言語ならコード 1 行で書けます。Python、JavaScript、Bash、PowerShell、PHP、Java、Go、C#、Ruby のコード例をご覧ください。

この Base64 エンコーダーは安全でプライバシーは守られますか?

はい。すべてのバイトは、お使いのブラウザのタブで動く JavaScript によってローカルでエンコードされます。テキスト、ファイル、画像がサーバーに送られることも、データベースに保存されることも、ログに残ることもありません。このサイトはアップロード先をまったく持たない静的ページです。エンコード中にブラウザの DevTools のネットワークタブを開くか、インターネットを切断してもツールが動くことを確かめれば、ご自身で確認できます。

Python で Base64 エンコードするには?

標準の base64 モジュールを使います。エンコードは base64.b64encode(data.encode("utf-8")).decode("ascii")、デコードは base64.b64decode(encoded).decode("utf-8") です。b64encode は str ではなく bytes を受け取るため、入力を先に UTF-8 にエンコードしている点に注意してください。URL セーフな出力には base64.urlsafe_b64encode、76 文字改行の MIME 出力には base64.encodebytes を使います。

PowerShell や Windows で Base64 エンコードするには?

PowerShell では、文字列のエンコードに [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("hello"))、ファイルのエンコードに [Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\path\file.png")) を実行します。cmd.exe からは certutil -encode in.png out.b64 がどの Windows でも使えますが、BEGIN と END のヘッダー行が付きます。[Text.Encoding]::Unicode(UTF-16 LE)は powershell -EncodedCommand に渡すときだけ使ってください。

JavaScript で Base64 エンコードするには?

ASCII テキストなら、btoa(str) でエンコード、atob(str) でデコードできます。btoa は U+00FF を超える文字でエラーになるため、Unicode テキストは先にバイト列に変換します:btoa(Array.from(new TextEncoder().encode(str), (b) => String.fromCharCode(b)).join(""))。スプレッド構文の String.fromCharCode(...bytes) は、大きな入力でコールスタックがあふれるので避けてください。Node.js では Buffer.from(str, "utf8").toString("base64") を使います。最新の実行環境では Uint8Array.prototype.toBase64() も使えます。

Linux でファイルを Base64 エンコードするには?

coreutils の base64 コマンドを使います。base64 file.txt でエンコード、base64 -d file.b64 でデコードです。改行なしの 1 行が必要なら -w 0、MIME 準拠の出力なら -w 76 を付けます。文字列を直接エンコードするにはパイプで渡します:printf %s "hello" | base64。echo ではなく printf を使うと、末尾の改行がエンコード対象に含まれません。

Mac で Base64 エンコードするには?

macOS のターミナルには BSD 版の base64 コマンドがあります。ファイルは base64 -i file.png -o file.b64、文字列は printf %s "hello" | base64 でエンコードし、デコードは base64 -D -i file.b64 -o file.png です。Linux の GNU 版と違い、標準では改行せず、-w オプションもありません。pbcopy にパイプすれば結果を直接クリップボードにコピーできます。

画像を Base64 エンコードするには?

このページの「ファイル・画像」タブを開いて画像をドロップしてください。Base64 文字列に加えて、そのまま貼れるデータ URI(data:image/png;base64,...)と、HTML・CSS・Markdown のコードが生成されます。Base64 にすると画像は約 33% 大きくなるため、埋め込むのは 5 KB 程度までの小さな画像にとどめ、それより大きな画像はブラウザがキャッシュできる通常のファイルとして配信するのがおすすめです。

URL セーフ Base64 とは何ですか?

標準の Base64 は、URL やファイル名で特別な意味を持つ + と / を使います。URL セーフ Base64(RFC 4648 §5、base64url とも呼ばれます)は + を - に、/ を _ に置き換え、通常は = のパディングも省きます。JSON Web Token で使われている形式です。このページの「URL セーフ」オプションをオンにすると生成できます。

Base64 文字列の末尾に = が付くのはなぜですか?

Base64 は入力を 3 バイトずつ区切り、それぞれを 4 文字に変換します。入力の長さが 3 の倍数でないと、出力の長さを 4 の倍数に保つため最後のグループを = で埋めます。1 バイト余れば = が 2 つ、2 バイト余れば = が 1 つになります。パディング自体はデータを持たず、base64url など一部の形式では省略できます。

Base64 にするとデータはどれくらい大きくなりますか?

約 33% 大きくなります。入力 3 バイトが出力 4 文字になるので、比率は 4/3 です。パディングを含む正確な長さは、入力 n バイトに対して 4 × ⌈n / 3⌉ 文字です。たとえば 10 バイトは 16 文字、1 MB は約 1.33 MB になります。MIME モードでは改行でさらに約 2.6%(76 文字ごとに 2 バイトの CRLF)増えます。このツールでは、入力・出力の正確なサイズと増加率を入力中に出力欄の下に表示します。

ファイルサイズに上限はありますか?

サーバーを使わないので、サーバー側の上限はありません。実際の上限はデバイスのメモリとブラウザのタブの制限で決まります。パソコンなら数百 MB 程度までのファイルはたいてい処理でき、このツールは大きなファイルを分割して処理するのでブラウザが固まりません。サーバーにアップロードする他のツールは、多くの場合 100 MB までに制限されています。

Base64 エンコードは Unicode や絵文字にも対応していますか?

はい。テキストはまず選択した文字コードでバイト列に変換されます。既定の UTF-8 は絵文字を含むすべての Unicode 文字に対応しています。そのバイト列が Base64 エンコードされます。文字化けの原因の多くはエンコード側とデコード側の文字コードの違いなので、特別な理由がない限り両方とも UTF-8 にしてください。