0

我正在尝试使用 AES 算法加密一个简单的字符串。一切似乎都很好,我能够解密它。只是出于好奇,我将加密的数据打印到控制台,我很惊讶地看到它。

输入字符串:原始文本字符串。

加密数据:Díå¼[¶cE¶Ÿ¸'E,;èýaó1ÒŽ&ýÈZ

解密数据:原始文本字符串。

谁能解释一下为什么加密的数据位是输入字符串的两倍长..?

4

2 回答 2

1

加密适用于固定大小的数据块。在编码过程中添加适当的填充,在解码过程中删除。

于 2012-08-31T11:30:35.803 回答
0

我不会依赖显示一个特殊的字符串来告诉它的长度。在加密时,您通常会得到一个应该为您提供确切值的值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);
}
于 2012-08-31T11:28:27.737 回答