エンコード形式の相互変換

あるバイナリ・テキスト変換方式で書かれた文字列を、1 ステップで別の方式に変換します。入力をバイト列にデコードしてから直接再エンコードするため、途中でデータが失われることはありません。

すべてブラウザ内で処理され、データはアップロードされません。

使い方

  1. 「変換元」で入力のエンコード方式を選びます(例:Base64)。
  2. 「変換先」で出力したいエンコード方式を選びます(例:Base58)。
  3. 入力を貼り付けると、変換結果が表示されます。
  4. 「コピー」をクリックして結果を使うか、「入力と出力を入れ替え」ボタンで逆方向に変換します。

テキストではなくバイト列を変換する理由

Base64、Base58、16進数など、このサイトで扱うエンコード方式はすべてバイト列を表すものです。いったんテキストにデコードし、そのテキストを再びエンコードする方法は、データが本当にテキストである場合にしか使えません。鍵、ハッシュ値、署名、画像、圧縮データには、有効な UTF-8 ではないバイト列が含まれます。テキストデコーダーはそれらを置換文字 U+FFFD に置き換えてしまうため、再エンコードした結果は気付かないうちに誤ったものになります。

この変換ツールは、変換元の文字列を生のバイト列にデコードし、そのバイト列を変換先のエンコード方式で直接書き出します。32 バイトの鍵は正確に 32 バイトのまま保たれ、先頭のゼロバイトも保持され、逆方向に変換すれば同じバイト列に戻ります。変換はすべてブラウザ内で行われます。

よく使われる変換

  • Base64 から Base58:API から取得した公開鍵やハッシュ値を、Bitcoin、Solana、IPFS で使われる形式に変換します。16進数の入力には 16進数 → Base58 をご利用ください。
  • Base32 から Base64 または16進数:TOTP のシークレットの中身を確認したり、別の形式を必要とするシステムで再利用したりできます。
  • 16進数から Base62 または Base58:URL 用にハッシュ値や ID を短くします。64 桁の SHA-256 の16進数文字列は約 43 文字になります。
  • Base64 から Base64URL:値を URL、Cookie、JWT のフィールドで安全に使える形にします。
  • Ascii85、Base85、Z85 から Base64:PDF のストリーム、Git のバイナリパッチ、ZeroMQ のメッセージから取り出したデータを再利用できます。

同じ 4 バイトを 5 つのエンコード方式で表すと、次のようになります。

エンコード方式値
16進数deadbeef
Base643q2+7w==
Base586h8cQN
Base6244pZgF
Base85-mSjx

入力のルールと制限

  • Base64 の入力には標準と URL セーフのどちらのアルファベットも使用でき、改行を含めることも、パディングを省略することもできます。
  • 16進数の入力にはスペース、コロン、0x プレフィックスを含めることができ、大文字と小文字のどちらでもかまいません。
  • Base58 と Base62 はデータを 1 つの大きな数として扱うため、これらが関わる変換は約 20 KB までに制限されます。
  • チェックサムの検証や付加は行いません。Base58Check 文字列を検証または作成するには、Base58Check のページを使ってください。

よくある質問

Base64 を Base58 に変換するにはどうすればよいですか?

「変換元」で Base64、「変換先」で Base58 を選び、文字列を貼り付けます。Base64 がバイト列にデコードされ、そのバイト列が Bitcoin の Base58 アルファベットで書き出されます。このアルファベットは Solana や IPFS でも使われています。

デコードしてから再エンコードするのと同じですか?

データがプレーンテキストの場合に限り同じです。鍵や画像などのバイナリデータでは、テキストにデコードするとバイトが失われます。このツールはテキストを経由しないため、バイト列が正確に保たれます。

変換後の文字列が入力より短くなったり長くなったりするのはなぜですか?
エンコード方式によって、1 文字に詰め込むビット数が異なるためです。16進数は 1 バイトあたり 2 文字、Base58 は約 1.37 文字、Base64 は約 1.33 文字が必要です。すべてのエンコードのページで並べて比較できます。
ここで2進数を10進数に変換できますか?
数値としては変換できません。このページの2進数は、8 ビットずつのグループで書かれたデータのバイト列を意味し、1 つの数値の値ではありません。2進数の 1010 を10進数の 10 にするなど、数値の値を変換するには基数変換ツールを使ってください。