文字列自体ではなく、文字列のバイト配列を暗号化するのがベスト プラクティスであることを読みました。
暗号化アルゴリズムは通常、バイト配列またはバイトストリームで機能するため、そうです。オブジェクト (文字列) を直接暗号化するのではなく、そのバイト表現を暗号化します。
また、特定の暗号化アルゴリズムは、暗号化された各パケットのサイズが固定長であることを想定していることを読みました。暗号化する最後のパケットが必要なサイズでない場合、暗号化は失敗します。
これは、選択した特定の暗号化アルゴリズムの実装の詳細です。それは、アルゴリズムに対する API インターフェイスが何であるかに大きく依存します。
一般的に言えば、はい、暗号化アルゴリズムは入力を固定サイズのブロックに分割します。最後のブロックがいっぱいでない場合、最後に任意のバイトを埋め込んで、完全なチャンクを取得できます。パディングされたデータと、たまたまパディングのように見えるバイトが末尾にあるデータを区別するために、プレーン テキストの長さをバイト ストリームの先頭または末尾に追加します。
これは、ユーザーに任せるべきではない種類の詳細であり、優れた暗号化ライブラリがこれらの詳細を処理します。理想的には、プレーン テキストのバイトをフィードして、反対側で暗号化されたバイトを取得したいだけです。
したがって、最初に 16 進数などの固定長に変換されたデータを暗号化することをお勧めします。
バイトを 16 進数に変換しても、固定長にはなりません。サイズが 2 倍になりますが、それは固定されていません。ASCII セーフになるため、テキスト ファイルや電子メールに簡単に埋め込むことができますが、ここでは関係ありません。(そして、Base64 は、16 進数よりも優れたバイナリ→ASCII エンコーディングです。)
さまざまな言語やプラットフォーム間でのデータの暗号化および復号化との互換性を確保するためのベスト プラクティスを特定するために、プロセスとして次の手順について批評したいと思います。
暗号化:
- プレーンテキスト文字列
- プレーンテキスト文字列をバイト配列に変換する
バイト配列を16進数に変換
- 16 進数を暗号化された文字列に暗号化する
暗号化された文字列
- プレーン テキストのバイト配列から暗号化されたバイト配列へ
復号化:
暗号化された文字列
- 暗号化された文字列を 16 進数に復号化する
16 進数をバイト配列に変換する
- 暗号化されたバイト配列
- 暗号化されたバイト配列を平文のバイト配列に復号化する
- バイト配列をプレーンテキスト文字列に変換する
- プレーンテキスト文字列
暗号化するには、プレーン テキスト文字列をそのバイト表現に変換してから、これらのバイトを暗号化します。結果は、暗号化されたバイト配列になります。
選択した方法で、バイト配列を他のプログラムに転送します。
復号化するには、暗号化されたバイト配列をプレーン テキストのバイト配列に復号化します。このバイト配列から文字列を構築します。終わり。