カスタムアルファベットによるエンコード・デコード

独自のアルファベットを入力するかプリセットを選び、そのアルファベットでエンコードまたはデコードします。任意の長さのアルファベットには多倍長整数方式を、RFC 4648 形式の出力にはビットグループ方式を選びます。

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

使い方

  1. 「アルファベット」に文字を入力するか、「プリセット」を選んで編集します。同じ文字は 1 回しか使えません。
  2. 「方式」を選びます。任意の長さのアルファベットには「多倍長整数(Base58 方式)」を、2、4、8、16、32、64 文字のアルファベットには「ビットグループ(RFC 4648 方式)」を使います。
  3. ビットグループ方式では、必要に応じて、アルファベットに含まれない文字を「パディング文字」に入力します。
  4. テキストをエンコードするか、そのアルファベットで書かれた文字列を貼り付けてデコードします。

バイト列を文字に対応付ける 2 つの方法

多倍長整数方式は Base58 と同じ仕組みです。入力全体を 1 つの大きな整数として読み取り、アルファベットの文字数で繰り返し割り算して、その余りで文字を選びます。10、36、58、62 文字など、2 文字以上のどんなアルファベットでも使えます。先頭のゼロバイトはアルファベットの最初の文字として書かれるため、エンコードしてからデコードしても失われません。パディングはなく、長いデータでは計算が遅くなるため、入力は約 20 KB までに制限されます。

ビットグループ方式は RFC 4648 と同じ仕組みです。入力を一定のビット数ごとに区切ります。2 文字のアルファベットなら 1 ビット、16 文字なら 4 ビット、32 文字なら 5 ビット、64 文字なら 6 ビットです。区切った各チャンクが、アルファベット内の位置を表します。これは16進数、Base32、Base64 の仕組みそのもので、出力の長さは入力の長さだけで決まります。

2 つの方式で結果が異なる理由

一方の方式はデータの数値としての値を、もう一方はビットを先頭から順にエンコードします。そのため結果は通常異なり、文字列は生成したときと同じ方式でデコードする必要があります。

アルファベット入力ビットグループ多倍長整数
標準の Base64HiSGk=Ehp
RFC 4648 Base32HiJBUQ====SDJ
01A010000011000001
0123456789Hi使用不可18537

ビットグループ方式でパディングに = を指定すると、標準のアルファベットで通常の Base64 や Base32 と同じ結果になります。多倍長整数方式は決まったビット数ではなく値を書き出すため、A の先頭のゼロビットが落ちます。10 個の数字をアルファベットにすると、Hi のバイト列をそのまま10進数で表した値になります。

パディング文字はビットグループ方式でのみ使われます。64 文字のアルファベットでは出力が 4 文字の倍数に、32 文字と 8 文字のアルファベットでは 8 文字の倍数になるようパディングされます。2 文字、4 文字、16 文字の場合は各バイトがちょうど文字に収まるため、パディングは不要です。

有効なアルファベットの条件

  • 2 文字以上であること。
  • 重複がないこと。デコーダーは各文字をただ 1 つの値に対応付けます。a が 0 と 10 の両方を表すとしたら、それを含む文字列はデコードできません。
  • 大文字と小文字は区別されます。a と A は別の文字です。
  • パディング文字はアルファベットに含めないこと。含めると、データと区別できなくなります。

処理はすべてブラウザ内で行われるため、アルファベットもデータもお使いのデバイスから外に出ません。

カスタムアルファベットが役立つ場面

  • ID の難読化。アルファベットを並べ替えると、識別子を規則性の見えないトークンに変えられます。ただし、これは隠すだけで保護にはなりません。アルファベットを知っていれば誰でもデコードできます。
  • 独自形式やレガシー形式。システムのドキュメントからそのシステム独自のアルファベットをコピーすれば、データを直接デコードできます。
  • 学習。アルファベットの長さや 2 つの方式を比べて、基数変換の仕組みを理解できます。固定のアルファベットについては、Base58 と Base62 をご覧ください。

よくある質問

多倍長整数方式とビットグループ方式の違いは何ですか?

多倍長整数方式は、Base58 のように入力全体を 1 つの整数として新しい基数に変換し、どんな長さのアルファベットでも使えます。ビットグループ方式は、Base64 のように入力を一定サイズのビットのまとまりに分割するもので、2、4、8、16、32、64 文字のいずれかのアルファベットが必要です。

カスタムの Base64 アルファベットで、標準の Base64 と同じ出力にならないのはなぜですか?

標準の Base64 はビットグループ方式を使っています。同じ結果にするには、「方式」で「ビットグループ(RFC 4648 方式)」を選び、「パディング文字」に = を設定してください。多倍長整数方式では、同じアルファベットでもまったく異なる文字列になります。

重複した文字が使えないのはなぜですか?

各文字は、ただ 1 つの値にデコードされなければならないためです。文字が重複すると 1 つの文字が 2 つの意味を持つことになり、元のデータを確実に復元できなくなります。

多倍長整数方式でパディング文字を使えますか?

いいえ。多倍長整数方式の出力には決まったブロックサイズがないため、パディングする対象がありません。パディングのオプションはビットグループ方式にのみ適用されます。

カスタムアルファベットは暗号化の一種ですか?

いいえ。鍵を使わないエンコードであることに変わりはありません。アルファベットを並べ替えるとデータが一目ではわかりにくくなりますが、秘密情報の保護には決して使わないでください。