18

我需要创建一个数据库列,该列将存储使用三重 DES 加密的字符串。如何确定加密字符串列的长度?

(也欢迎回答三重 DES 以外的算法。)

4

3 回答 3

25

DES、3DES 和 AES 等分组密码只能对字节块进行操作。DES 和 3DES 对 8 字节的块进行操作,而 AES 对 16 字节的块进行操作。

为了解决这个问题,您通常在加密之前对明文应用可逆填充。它通常总是“PKCS”-填充(也称为 PKCS5-或 PKCS7-填充)。

PKCS 填充添加至少一个字节,以便填充文本的长度可与块长度整除(3DES 为 8 个字节)。padding-bytes 的值是添加的字节数。外汇。ABCDEF 被填充到 ABCDEF0505050505 和 0011223344556677 被填充到 0011223344566770808080808080808。请注意,这很容易删除:您只需查看填充字节的最后一个字节,验证它是否在 1 和块长度之间,然后删除该字节数从最后开始(验证每个删除的字节是否具有正确的值)。

最后,回答您的问题:假设您使用 3DES 和 CBC 加密和 PKCS 填充 - 您可能是 - 长度为 n 的字符串的加密将具有长度:

n + 8 - (n % 8)
于 2009-01-20T21:35:43.043 回答
4

使用三重 DES 不会更改字符串的长度,但会四舍五入到下一个 64 位边界。如果您打算“显示”它,则必须对其进行编码(不过就像在Base64中一样。

至于其他算法,实在是太多了,很难回答。块密码将始终填充输入以匹配其块大小,而许多流密码则不会。

于 2009-01-19T10:52:23.360 回答
1

三重 DES使用三个 56 位 DES 密钥,提供 168 位密钥。它的块大小是64-bit

于 2009-01-19T10:42:13.003 回答