我正在尝试使用AES算法加密一个简单的字符串。 一切似乎都很好,我可以解密它。 出于好奇,我将加密数据打印到控制台和i 很惊讶地看到它。
输入字符串:原始文本字符串。
加密数据:Díå¼[¶cE¶Ÿ¸'E,;èýaó1ÒŽ&ýÈZ
解密数据:原始文本字符串。
任何人都可以解释为什么加密数据位的长度是输入字符串的两倍......?
答案 0 :(得分:1)
加密适用于固定大小的数据块。在编码期间添加适当的填充,并在解码期间删除。
答案 1 :(得分:0)
我不会依赖于显示特殊字符String来告诉它的长度。在加密时,您通常会获得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);
}