Base85エンコーダー・デコーダー
Base85は4バイトを5つのASCII文字に詰め込みます。64文字ではなく85文字の文字集合を使うため、Base64の「3バイトを4文字」という比率より高密度です。AdobeのAscii85形式はすべてのPostScriptファイルとPDFファイルの中で使われています。より新しいZ85(ZeroMQ)形式は、C言語の文字列やXMLの中で問題を起こす文字を避けています。このツールは、区切り記号を付けるかどうかを選べる形で、両形式のエンコードとデコードに対応します。
Base85を変換する方法
-
1
形式を選ぶ
PDFやPostScriptの素材にはAscii85、ソースコードやネットワークプロトコルにはZ85を選びます。
-
2
テキストを貼り付けるかファイルをアップロード
エンコードでは生のバイト列を、デコードではBase85の文字列を受け取ります。
-
3
エンコーダーが4バイトごとに分割
4バイトの各ブロックが5文字のBase85文字列になります。最後のブロックは詰め物を加えてから末尾を切り詰めます。
-
4
結果をコピー
Ascii85は必要に応じて`<~`と`~>`の区切り記号で囲めます。Z85では区切り記号は使いません。
サイズ増加率の比較
| 符号化方式 | 4バイトあたりの文字数 | バイナリと比べた増加率 |
|---|---|---|
| Hex | 8 | +100% |
| Base64 | 5.33(詰め物込みで8に切り上げ) | +37% |
| Base85 | 5 | +25% |
| 生バイナリ | 4 | 0 |
つまり1 MBのバイナリは、Base85では1.25 MB、Base64では1.33 MB、hexでは2 MBになります。
Ascii85とZ85の文字集合
Ascii85(RFC 1924 / Adobe): ASCIIの!からuまで(33〜117)の文字に加え、4つのゼロバイトを表す短縮記号としてzを使います。PostScriptとPDFのストリームで使われ、<~...~>で囲まれます。
Z85(ZeroMQ): 引用符やエスケープが必要な文字を避けた部分集合です。
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#
JSON、XML、C言語の文字列、ソースコードの中に、エスケープせずにそのまま埋め込めます。
計算の仕組み
4バイトごとに、ビッグエンディアンの32ビット整数Nとして読み取ります。出力される5文字は、Nを85進数で表したときの各桁で、上位の桁から並びます。85^5 = 4 437 053 125は2^32より大きいため、4バイトは必ず5文字に収まります。
Ascii85が役立つ場面
PDFをテキストエディターで開き、ASCII85Decodeを検索してみてください。Adobeは、7ビット伝送(古いファクス風のシステム)を通り抜ける必要がある埋め込み画像やフォントのフィルターとして、これを使っています。Z85はZeroMQのCURVE認証鍵で広く使われています。
特殊なケース
- すべてゼロの4バイトブロック - Ascii85では
!!!!!ではなく1文字のzにエンコードします。 - すべて空白の4バイトブロック - 一部の形式は4つの空白に
yを使いますが、使わないものもあります。 - 末尾の半端なブロック - ゼロバイトで埋めてから、対応する数の出力文字を末尾で切り詰めます。
よくある質問
出力が小さいという意味では、はい。どこでも使えるという意味では、いいえ。Base85には<、>、&、"(Ascii85の場合)のように、XML、JSON、URLでエスケープが必要な文字が含まれます。Z85はこれを避けますが、ほとんどのツールは標準でBase64に対応しています。
PostScriptやPDFのファイルを扱うならAscii85です。ソースコード、設定ファイル、ネットワークプロトコルにはZ85を使います。RFC 1924のIPv6符号化は同じ85文字を別の割り当てで使うもので、実際にはほとんど使われません。
いいえ。両者は異なる文字集合を使います。Ascii85をZ85の対応表でデコードすると、意味のないデータになります。エンコードする前にどちらか一方を選び、それを使い続けてください。
PDFやPostScriptのストリーム内のAdobe Ascii85では必要です。エンコードされた範囲を示すためです。単独で使う場合や、すべてのZ85出力では、区切り記号は不要です。
関連ツール
AES暗号化 / 復号
OpenSSLのAES暗号方式で低リスクのテキストを暗号化・復号します。パスフレーズはSHA-256でハッシュされ、Base64出力はIVと暗号文です。
Atbash暗号エンコーダー
A-ZをZ-Aに対応させるヘブライ系の換字式暗号、Atbashでテキストをエンコードまたはデコードできます。同じ操作で暗号化と復号ができます。
A1Z26暗号エンコーダー
A1Z26暗号(A=1、B=2、... Z=26)でテキストをエンコード、または数字列を文字へデコードできます。区切り文字も選べます。
bcryptジェネレーター
平文パスワードからbcrypt hashを生成します。cost factorは4から14まで調整でき、Laravel、Django、Node、PHPと互換性があります。
bcrypt Hashジェネレーター
bcrypt hashの生成、または平文パスワードと既存bcrypt hashの照合を行います。生成とverifyを1つのツールで並べて使えます。
Base32エンコーダー・デコーダー
RFC 4648アルファベットでBase32文字列をエンコード・デコードします。TOTPシークレット、大文字小文字を区別しないトークン、人が入力する識別子に便利です。