【发布时间】:2020-04-09 05:55:30
【问题描述】:
我遇到了加密问题,我正在寻找一些指导。
我正在使用 AES 加密 (Rijndael) 来加密和解密用户密码、安全问题答案和 PIN 码。然后将这些加密值放入数据库中,其中字段定义为 bin(16)、bin(32) 和 bin(64)。最初我使用自定义填充来确保数据的长度,但出于安全原因,我将使用 PKCS7 填充。不幸的是,这种变化使加密字符串的长度变得不可预测,至少对于密码和安全问题的答案是这样。例如,有效密码在加密时可以是 16 或 32 字节长,而安全答案在加密时可以是 16、32 或 64 字节。我知道块大小是什么以及它是如何工作的,但即使使用 32 字节的块大小(可用的最大块大小)我仍然无法控制安全答案的长度(它可能是 32 或 64 字节)。
有没有办法强制我的加密字符串为特定长度,同时仍然使用 AES 和 PCKS7 填充,而不增加输入限制?
【问题讨论】:
-
这是可以预见的。请参阅来自 CSE 的 answer。
-
你是对的,也许可预测不是正确的词。当我知道输入的长度时,输出长度是可以预测的。但是如果我不知道输入的长度,这里就是这种情况,我就无法知道输出的长度(除了它是块大小的倍数)。
-
如果您接受用户的最大尺寸,那么填充零填充更适合您的原因。
-
@kelalaka 是的,这似乎是我最好的选择。感谢您的意见。
-
它是 10...0000 填充,因此您可以通过查看第一个 1 从末尾删除。
标签: encryption aes rijndael