我需要创建一个数据库列,它将存储使用Triple DES加密的字符串。如何确定加密字符串列的长度?
(欢迎使用Triple DES以外的算法的答案。)
答案 0 :(得分:22)
DES,3DES和AES等块密码只能在字节块上运行。 DES和3DES在8字节块上运行,AES在16字节块上运行。
要处理此问题,您通常会在加密之前对明文应用可逆填充。它通常是“PKCS” - padding(也称为PKCS5-或PKCS7-padding)。
PKCS-padding至少添加一个字节,使得填充文本的长度与块长度可分开(3DES为8个字节)。 padding-bytes的值是添加的字节数。 FX。 ABCDEF填充到ABCDEF0505050505,0011223344556677填充到0011223344566770808080808080808。请注意,这很容易删除:您只需查看填充字节的最后一个字节,验证它是否在1和块长度之间,并删除该字节数从最后(验证每个删除的字节具有正确的值)。
最后,回答你的问题:假设您正在使用带有CBC加密和PKCS填充的3DES(您可能是这样) - 长度为n的字符串的加密将具有长度:
n + 8 - (n % 8)
答案 1 :(得分:4)
使用Triple DES不会更改字符串的长度,但会舍入到下一个64位边界。如果你打算“显示”它,你就必须对它进行编码(就像在Base64中一样。
至于其他算法,由于有很多,很难回答。分组密码将始终填充输入以匹配其块大小,而许多流密码则不会。
答案 2 :(得分:1)
Triple DES使用三个56位DES密钥,提供168位密钥。它的块大小是 64位。