コメント欄で、より優れた他の手法をご紹介いただきました。
内容を拝見し、確かに私の記事で紹介している方法より有用だと感じています。
ぜひコメント欄もあわせてご覧いただければ幸いです。
なお、この記事自体はコメント欄の情報を残す目的で公開したままにしています。
Base64 使いたい場合、「使用する文字数が必ず 64 文字であること」が重要になることがあります。
しかし Base64 文字列は、データ長によって 末尾に = が付くことがあり、
その結果、使用する文字数が 65 文字になる場合があります。
そこで本記事では、末尾の = の数を「数字」で表すことで、
使用する文字数を常に 64 文字に揃える方法を紹介します。
Base64 の末尾に = が付く理由
Base64 は「3 バイト → 4 文字」で変換します。
入力データが 3 の倍数でないと、余りの部分を補うために = が付加されます。
- 余り 0 バイト → パディングなし
- 余り 1 バイト →
== - 余り 2 バイト →
=
そのため、本来 64 文字で揃えたい Base64 でも、
-
=が 1 個 → 使用文字数が 65 文字 -
=が 2 個 → 使用文字数が 65 文字
というズレが発生します。
解決策:パディング = の個数を数字で表現する
本来末尾に付くパディング = の個数(0 / 1 / 2)を、
最後の 1 文字として数字で付与します。
これにより、Base64 として使用する文字は:
- 本体:64 文字
- パディング情報:数字 1 文字
の合計 64 文字になります。
例:
-
abcde→ パディングなし →abcde0 -
abcde=→ パディング1個 →abcde1 -
abcde==→ パディング2個 →abcde2
つまり Base64 の使用文字数は常に 64 文字 という方法です。
復元方法(デコード時)
復元も非常に簡単です:
- 末尾の数字を読む(0 / 1 / 2)
- その数字を消して Base64 本体の末尾に、その数だけ
=を追加する - その Base64 を通常どおりデコードする
例:
-
abcde1→ 本体abcde+=→ 復元abcde= -
xyz0→xyz(パディングなし)
使用文字数 64 文字だけで、確実に復元できます。
この方式のメリット
- Base64 を 常に 64 文字で使用可能
- パディング情報を 数字 1 桁で管理できる
- デコードも簡単で安全
固定長トークンやセキュアな ID を扱う場面で非常に便利です。
以上、Base64 の「使用する文字数を 64 文字に固定」するための方法でした。
閲覧ありがとうございました。