我正在尝试使用 AES 算法加密一个简单的字符串。一切似乎都很好,我能够解密它。只是出于好奇,我将加密的数据打印到控制台,我很惊讶地看到它。
输入字符串:原始文本字符串。
加密数据:Díå¼[¶cE¶Ÿ¸'E,;èýaó1ÒŽ&ýÈZ
解密数据:原始文本字符串。
谁能解释一下为什么加密的数据位是输入字符串的两倍长..?
我正在尝试使用 AES 算法加密一个简单的字符串。一切似乎都很好,我能够解密它。只是出于好奇,我将加密的数据打印到控制台,我很惊讶地看到它。
输入字符串:原始文本字符串。
加密数据:Díå¼[¶cE¶Ÿ¸'E,;èýaó1ÒŽ&ýÈZ
解密数据:原始文本字符串。
谁能解释一下为什么加密的数据位是输入字符串的两倍长..?
加密适用于固定大小的数据块。在编码过程中添加适当的填充,在解码过程中删除。
我不会依赖显示一个特殊的字符串来告诉它的长度。在加密时,您通常会得到一个应该为您提供确切值的值byte[]
。length
如果你想打印它,十六进制表示看起来更清晰:
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);
}