ファイルを選択
  1. base64hub
  2. その他の基数
  3. Base58 を Base64 に

Base58 を Base64 に:鍵とハッシュを変換

Solana のアドレスや IPFS の Qm… ハッシュなどの Base58 の値を貼り付けると、同じバイト列を標準の Base64 で得られます。先頭の 1 はすべてゼロバイトとして保持されるので、バイト数は正確なままです。

無料 登録不要・制限なし ローカル アップロードなし バイト列は正確 先頭のゼロも保持 更新日 2026/10/27
入力 0バイト 0 B出力 0

ブラウザ内で処理されます。このページがデータをどこかに送信することはできません – その根拠

Base58 を Base64 に変換する方法

  1. 入力 · Base58 に Base58 文字列を貼り付けます。改行と空白は無視されます。
  2. Bitcoin のアルファベットでない場合は、入力の下のアルファベットを Flickr か Ripple に変更します。
  3. 出力 · Base64 で Base64 を確認します。パディングなしの Base64 にするには出力の下のパディング(=)のチェックを外し、折り返しを 64 桁や 76 桁に設定することもできます。
  4. 出力をコピーします。逆方向には、方向の切り替えで Base64 → Base58 を使います。Base64 を Base58 にのページは最初からその方向で開きます。

ツールの下のカウンターには、入力の長さ、デコードしたバイト数、出力の長さが表示されます。バイト数を見れば、鍵を丸ごと貼り付けたかをすぐに確認できます。Solana の公開鍵なら 32、署名やキーペアなら 64、IPFS CIDv0 なら 34 です。

例

Base58Base64バイト数
9AjdvzrSGVsbG8=5、テキストの Hello
11111111111111111111111111111111AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=32 個のゼロバイト
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKk=32、Solana の SPL Token プログラム
QmQudp5N7EzTxrBk3yESEKyEroMYNd7R22G2KWffwNZyzqEiAmKoa2duWGnt1dGt+P/QHWKcMVS/3q7PyM+g2Q4Igtig==34、IPFS CIDv0
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNaAGLpB7FcvyfVQlOZ6/bw+1DruI8Ywpt9kw==25、チェックサム付きの Bitcoin アドレス

どの CIDv0 も、Base64 に変換すると EiA で始まります。これはマルチハッシュのヘッダー 12 20(SHA-256、32 バイト)です。最初の 2 バイトを取り除けば素のダイジェストになり、SHA-256 のツールが出力する形と同じです。

Solana のデータが両方のエンコーディングで現れる理由

Solana のウォレットやエクスプローラーでは、公開鍵、プログラム ID、トランザクションの署名が Base58 で表示されます。一方、JSON-RPC API はシリアライズしたトランザクションを Base64 か Base58 で受け付け、Base58 は遅く非推奨の選択肢とされています。アカウントデータは、そのエンコーディングを指定すれば Base64 で返ってきます。そのため、同じ 32 バイトの鍵が、ある場所では Base58 で、別の場所では Base64 の中に現れることがあります。

変換してもバイト列は変わらないので、2 つの値を比較する安全な方法になります。Base58 の鍵と Base64 の鍵がここで同じ Base64 になれば、それは同じ鍵です。

Python で Base58 を Base64 に変換する

標準ライブラリには Base64 はありますが Base58 はないので、前半は短いループで書きます。

import base64

ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"

def base58_to_base64(s: str) -> str:
    n = 0
    for ch in s:
        n = n * 58 + ALPHABET.index(ch)
    body = n.to_bytes((n.bit_length() + 7) // 8, "big")
    zeros = len(s) - len(s.lstrip("1"))
    return base64.b64encode(b"\0" * zeros + body).decode()

base58_to_base64("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")
# 'Bt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKk='

ALPHABET.index は、0 や l など Base58 以外の文字に対して ValueError を発生させます。Python での Base64 の扱いについては Python のページをご覧ください。

よくある問題

  • バイト数が 1 つ足りない。 以前に使った変換ツールが先頭のゼロバイトを落としています。このページはそれを保持するので、出力を比較してみてください。
  • 0、O、I、l の位置でエラーになる。 これらの文字は Base58 にありません。コピーや OCR の誤りを確認してください。
  • 入力が bc1、0x、bafy で始まる。 それぞれ Bech32、16進数、Base32(IPFS CIDv1)で、Base58 ではありません。CIDv1 の読み方は Base32 デコーダーで説明しています。
  • 出力が想定より 4 バイト長い。 文字列は Base58Check で、チェックサムが付いたままです。

よくある質問

Solana の公開鍵を Base64 に変換するにはどうすればいいですか?

入力欄にアドレスを貼り付けてください。有効な Solana の公開鍵はちょうど 32 バイトにデコードされるので、Base64 の出力は常に = 1 つで終わる 44 文字、パディングなしなら 43 文字です。

Base64 が A で始まるのはなぜですか?

Base58 の入力が 1 で始まっており、それがゼロバイトにデコードされるからです。Base64 の最初の文字は最初の 6 ビットで決まり、6 つのゼロビットは A です。Bitcoin のアドレス 1A1zP1… が AGLp… になるのはこのためです。

URLセーフな Base64 にするには?

結果を Base64 から Base64URL へにコピーしてください。+ と / を - と _ に置き換え、パディングを取り除きます。= を落とすだけでよければ、ここでパディング(=)のチェックを外してください。

Base58Check の文字列では出力が変わりますか?

変換自体は同じですが、Base64 にはバージョンバイトと 4 バイトのチェックサムが含まれます。ペイロードだけが欲しい場合は、先に Base58Check ツールでデコードしてください。