UltKit

JSONをBase64にエンコード

JSONファイルを1行のBase64テキストに変換します。引用符や波かっこ、改行が問題になる環境変数、YAMLのフィールド、APIのリクエスト本文でも、そのまま扱えます。デコードすれば元とまったく同じバイト列に戻ります。

データ変換

またはCSV, TSV, TXT … ファイルをここにドロップ ·

1ファイルあたり最大95 MB· 最大20ファイルまで· 30分後に削除

出力

ファイルは当社のサーバーで処理され、30分後に削除されます。

このツールの使い方

  1. 1

    JSONファイルをアップロード

    サービスアカウントキーや設定ファイルなどの .json、.jsonl、.ndjson ファイルを追加します。1回に最大20ファイル、1ファイルあたり95 MBまで処理できます。

  2. 2

    プレフィックスの有無を選ぶ

    標準では通常のBase64になっています。HTMLやCSSの属性など、data: URLが必要な場所にテキストを入れる場合だけ、詳細設定のデータURIプレフィックスをオンにしてください。

  3. 3

    エンコードしてコピー

    Base64テキストに変換を押し、結果をダウンロードして、文字列をシークレットストア、マニフェスト、リクエストボディに貼り付けます。

JSONをBase64にエンコードしても、データの内容は変わりません。波括弧、引用符、改行が壊れてしまう場所でも送れるように、英数字だけの文字列に詰め替えるだけです。

JSONファイルをBase64にエンコードする理由

代表的なのは認証情報ファイルです。クラウドプロバイダーからサービスアカウントキーをJSONファイルで渡されても、CIシステム、ホスティングのダッシュボード、コンテナプラットフォームには、シークレット用の1行テキスト欄しかないことがあります。生のJSONを貼り付けると、最初の改行やエスケープされていない最初の引用符で壊れてしまいます。Base64にすれば、同じキーが途切れのない1本の文字列になり、アプリケーションが起動時にデコードして使えます。

Base64自体の起源はメールにあります。1996年にRFC 2045で定義されたMIMEが、7ビットのテキストしか扱えないメールサーバーを添付ファイルが通過できるように採用しました。その後、2006年にRFC 4648で文字セットが単独で標準化されています。代償はサイズで、3バイトごとに4文字になります。画像などのバイナリファイルには、同じエンコードで対応するデータURIも作れる画像をBase64に変換をご利用ください。受け取る側がBase64欄ではなくYAMLを読むなら、JSONをYAMLに変換だけで足りるかもしれません。

JSONからBase64への変換例

圧縮したJSON {"env":"prod","retries":3} とそのBase64エンコード
{"env":"prod","retries":3}

eyJlbnYiOiJwcm9kIiwicmV0cmllcyI6M30=

Base64形式のJSONが求められる場面

JSONをBase64でしか受け付けない場所
機関要件出典
Kubernetes Secretsdata 配下の値はすべてBase64である必要があります。JSONキーファイルをマウントするには、先にエンコードします。kubernetes.io
GitHub REST APIファイル内容の作成・更新エンドポイントでは、.json ファイルを含むファイルを、Base64で content に指定します。docs.github.com
JSON Web Tokens (RFC 7519)JSONのヘッダーとクレームは、それぞれbase64urlでエンコードし、ドットでつなげます。—
メールの添付ファイル(MIME).json の添付ファイルは、テキストのみ対応のメールサーバーを通過できるよう、Base64の転送エンコードで送信されます。—
Base64Base64エンコード · RFC 4648エンコード
任意のバイト列を、A–Z、a–z、0–9、+、/ の64種類の安全な文字と、パディング用の = で表す方法です。入力3バイトごとに4文字が出力されるため、テキストは元のファイルより約3分の1長くなります。元に戻せて鍵も使わないため、セキュリティ対策ではなく、転送用の形式です。

JSONとBase64の形式データ

JSON

JavaScriptオブジェクト表記

JSONは構造化データ用の軽量なテキスト形式で、2000年代初めにDouglas Crockfordが広め、RFC 8259とECMA-404として標準化されました。オブジェクト、配列、文字列、数値、真偽値、nullを、シンプルで読みやすい構文で表現します。ウェブAPI、設定ファイル、ほぼあらゆるプログラミング言語でのアプリ間のデータ交換における標準的な形式です。コメント、日付、スキーマは標準では含まれず、深くネストした大きなファイルはビューアなしでは読みにくくなります。

圧縮方式
–
透過
–
アニメーション
–
登場時期
2001 · Douglas Crockford
JSON 変換

BASE64

Base64エンコードされたテキスト

Base64は、RFC 4648で定義されたエンコード方式で、あらゆるバイナリデータを64種類の安全なテキスト文字の文字列に変換します。HTMLやCSSへのデータURIとしての画像埋め込み、メールへのファイル添付、JSONやXMLでのバイナリデータ送信に使われます。エンコードは完全に元へ戻せますが、データは約33%大きくなります。Base64は暗号化ではなく、セキュリティもありません。誰でもデコードできます。

圧縮方式
可逆
透過
–
アニメーション
–
登場時期
–
BASE64 変換

生の引用符や改行を扱えない1つの文字列フィールドに、構造化データを入れる必要があるときに、JSONはBase64にエンコードされます。たとえばCIのシークレット、Kubernetesのマニフェスト、APIの content フィールド、ヘッダー値などです。

JSONのBase64変換に関するよくある質問

Base64にしたJSONは暗号化されていますか?

いいえ。Base64は暗号化ではなくエンコードで、誰でも1つのコマンドでデコードできます。Kubernetesのドキュメントでも、Secretは既定ではBase64エンコードされただけで暗号化されずに保存されると警告されています。エンコードした文字列も、元のキーと同じように厳重に管理してください。

トークンやURLにはBase64とbase64urlのどちらを使いますか?

ここで出力する標準のBase64は、+ と / を使い、末尾を = で埋めます。JWTやURLパラメータでは、RFC 4648のbase64urlが使われ、- と _ に置き換わり、パディングは通常省かれます。変換先がbase64urlを求める場合は、これら3つの文字を置き換えてください。

エンコード前にJSONを圧縮(minify)すべきですか?

多くの場合は小さくなります。スペース、インデント、改行も他と同じ1バイトで、3バイトごとに4文字の出力になります。整形済みの設定ファイルを先に jq -c などで圧縮しておくと、その分エンコード後の文字列も短くなります。

Base64の文字列をJSONに戻すには?

macOSやLinuxでは base64 --decode、PowerShellでは [Convert]::FromBase64String を使います。ブラウザでは、atob の結果を TextDecoder に通すと、UTF-8の文字も正しく元に戻ります。

kubectlで「illegal base64 data」と表示されるのはなぜですか?

Secretマニフェストの data には、1行の正しいBase64を指定する必要があります。このエラーは、貼り付け時に改行が混入した場合や、data に通常のJSONを入れた場合によく起こります。通常の値は stringData に入れると、Kubernetesがエンコードしてくれます。

エンコードでJSONの中身は変わりますか?

いいえ。Base64はバイト列とテキストを欠落なく相互変換するため、キー、値、アクセント付き文字、ファイル先頭のバイトオーダーマークまで、デコード時にそのまま復元されます。