AES アルゴリズムを使用して単純な文字列を暗号化しようとしています。すべて問題ないようで、復号化できます。好奇心のために、暗号化されたデータをコンソールに出力したところ、それを見て驚きました。
入力文字列: 生のテキスト文字列。
暗号化データ : Díå¼[¶cE¶Ÿ¸'E‚;èýaó1ÒŽ&ýÈZ
復号化されたデータ: 生のテキスト文字列。
暗号化されたデータ ビットが入力文字列の 2 倍の長さである理由を誰か説明できますか?
AES アルゴリズムを使用して単純な文字列を暗号化しようとしています。すべて問題ないようで、復号化できます。好奇心のために、暗号化されたデータをコンソールに出力したところ、それを見て驚きました。
入力文字列: 生のテキスト文字列。
暗号化データ : Díå¼[¶cE¶Ÿ¸'E‚;èýaó1ÒŽ&ýÈZ
復号化されたデータ: 生のテキスト文字列。
暗号化されたデータ ビットが入力文字列の 2 倍の長さである理由を誰か説明できますか?
暗号化は、固定サイズのデータのブロックで機能します。エンコード中に適切なパディングが追加され、デコード中に削除されます。
その長さを伝えるために、特殊文字の文字列を表示することに頼りません。暗号化では、通常、正確な値を提供するbyte[]
for を取得します。length
印刷したい場合は、16 進数表現の方が明確に見えます。
public static void showHex(byte[] data) {
final String HEXDIGITS = "0123456789abcdef";
StringBuilder res = new StringBuilder();
for (int i = 0; i < data.length; i++) {
int v = data[i] & 0xff;
res.append(HEXDIGITS.charAt(v >> 4));
res.append(HEXDIGITS.charAt(v & 0xf));
}
System.out.println(res);
}