gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:51:11 24 4
gpt4 key购买 nike

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

我正在使用需要这种加密方法的第 3 方 API。

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

干杯,丹尼斯

最佳答案

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

  1. 自己补0,舍弃最后一 block 密文
  2. 编辑代码并使填充函数执行零填充(注意许可证限制 - 我没有查看许可证)

至于为什么,我猜他们只是没有必要或没有时间实现它。

如果您选择选项 1,如果明文已经是 block 大小的倍数,PKCS7 将添加一个完整的 0x10 字节 block 。因此,您可以只用 0x00 字节填充明文,使其成为 block 大小的倍数并对其进行加密。然后你会丢弃密文的最后 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);
}
}
},

关于javascript - slowAES 是否允许/支持零填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5513657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com