我正在尝试使用零填充在CBC模式下执行AES加密。有谁知道aesSlow是否支持零填充?基于我对代码的阅读,它没有,如果是这样的话;谁能告诉我为什么?
我正在使用需要此加密方法的第三方API。
jsfiddle.net/NMATS/2是我目前的POC。一旦它被调试,我就会把它移到节点上。输入也相似但安全性不同。
干杯, 丹尼斯
答案 0 :(得分:1)
看起来你是对的。它似乎使用PKCS7。您的选择是:
至于为什么,我猜他们只是没有必要这样做或者是时候实现它了。
如果你选择选项1,如果你的明文已经是块大小的倍数,PKCS7会添加一个完整的0x10
字节块。因此,您可以使用0x00
字节填充明文,使其成为块大小的倍数并加密。然后你会丢弃密文的最后128位(只有16字节的0xFF加密)。最终会得到兼容的结果。
如果选择选项2,我不确定您使用的是哪种实现方式,但我认为它们都非常简单。
这是Javascript实现的填充函数:
padBytesIn: function(data) {
var len = data.length;
var padByte = 16 - (len % 16);
for (var i = 0; i < padByte; i++) {
data.push(padByte);
}
},
以下是您将其更改为:
padBytesIn: function(data) {
var len = data.length;
if( len % 16 > 0 ){
var padLen = 16 - (len % 16);
for (var i = 0; i < padLen; i++) {
data.push(0);
}
}
},