3
我试图在零填充的CBC模式下执行AES加密。有谁知道如果aesSlow支持零填充?根据我对代码的理解,它不会,如果是这样的话;谁能告诉我为什么?slowAES是否允许/支持零填充?
我正在使用需要此加密方法的第三方API。
jsfiddle.net/NMATS/2是我目前的POC。一旦它被调试,我会一直在努力。此外,输入是相似的,但不同的安全性。
干杯, 丹尼斯
我试图在零填充的CBC模式下执行AES加密。有谁知道如果aesSlow支持零填充?根据我对代码的理解,它不会,如果是这样的话;谁能告诉我为什么?slowAES是否允许/支持零填充?
我正在使用需要此加密方法的第三方API。
jsfiddle.net/NMATS/2是我目前的POC。一旦它被调试,我会一直在努力。此外,输入是相似的,但不同的安全性。
干杯, 丹尼斯
看起来你是正确的。它似乎使用PKCS7。您的选项则是:
至于为什么,我猜他们只是没有必要去做或者没有时间去实现它。
如果使用选项1,则PKCS7将添加一个0x10
字节的完整块,如果您的明文已经是块大小的倍数。因此,您可以使用0x00
字节来填充您的明文,使其成为块大小的倍数并对其进行加密。然后你会丢弃密文的最后128位(这只是0xFF加密的16个字节)。你会得到一个兼容的结果。
如果使用选项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);
}
}
},
修正:你添加16个字节的值0x10的,否则你是正确的。 (或15个字节的值为0xF,...高达0x1的一个字节;如果你没有填充0 mod 16个字节0) – 2011-04-01 17:52:26
Sry Henno,你失去了我吗?代码更改会是什么?我有我的示例尝试@ http://jsfiddle.net/NMATS/1/这将在稍后移动到节点,密钥,iv和成员访问都是类似的,但对安全性不同。 – 2011-04-01 23:10:47
@Henno Brandsma请你详细说明一下吗?我很确定上面的所有内容都是正确的。我只是再看一遍。你在谈论选项1还是选项2? @Denis Hoctor - 看起来好像适合你,是吗? – Luke 2011-04-02 00:19:52