三重 DES 结果长度

triple DES result length

如果我加密电子邮件以便将它们存储在数据库中,则生成的字符串比电子邮件本身长。这个生成的编码字符串是否有最大长度?如果是这样,它是否取决于密钥长度和电子邮件长度?我需要知道这一点,这样我才能将我的数据库字段设置为正确的长度。 谢谢。

正如 Alex K. 指出的那样,对于块密码(如 DES),普通模式会将它们填充到块大小的倍数。 3DES 的块大小为 64 位(8 字节)。最常见的填充方案是PKCS7,它用"n x n bytes."填充块。也就是说,如果你需要一个字节的填充,它用0x01填充。如果您需要四个字节的填充,它会用 0x04040404 (4x 4s) 填充。如果您的数据已经是正确的长度,它将填充一个完整的块(3DES 的 8 个字节的 0x08)。

短版本是 3DES 的填充密文最多可以比明文长 8 个字节。如果您的加密方案是典型的、不安全的实现,这就是长度。您使用的是 3DES(一种过时的密码)这一事实使它更有可能被不安全地实现,所以这就是答案。

但是如果你的方案执行得好,那么消息中可能会附加很多其他的东西。可能有 8 个字节的初始化向量。如果您使用密码,可能会有任意长度的盐。可能有一个 HMAC。可能有很多东西可以添加任意数量的 space。 (例如,RNCryptor 格式向消息添加了多达 82 个字节。)所以您需要知道您的格式是如何实现的。