slowAES是否允许/支持零填充?

时间:2011-04-01 12:54:22

标签: javascript encryption aes

我正在尝试使用零填充在CBC模式下执行AES加密。有谁知道aesSlow是否支持零填充?基于我对代码的阅读,它没有,如果是这样的话;谁能告诉我为什么?

我正在使用需要此加密方法的第三方API。

jsfiddle.net/NMATS/2是我目前的POC。一旦它被调试,我就会把它移到节点上。输入也相似但安全性不同。

干杯, 丹尼斯

1 个答案:

答案 0 :(得分:1)

看起来你是对的。它似乎使用PKCS7。您的选择是:

  1. 自己填0并弃掉最后一段密文
  2. 编辑代码并使填充功能执行零填充(谨防许可限制 - 我没有查看许可证)
  3. 至于为什么,我猜他们只是没有必要这样做或者是时候实现它了。

    如果你选择选项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);
                    }
                }
        },