【问题标题】:Java AES/CBC/NoPadding equivalent in NodeJsNodeJs 中的 Java AES/CBC/NoPadding 等价物
【发布时间】:2018-04-06 21:54:27
【问题描述】:

我已被分配使用 AES/CBC/NoPadding 解码在 java 中构建的令牌。

我正在为此研究 node-forge 和加密。我的问题是我不知道 NodeJs 中算法 AES/CBC/NoPadding 的等效项。

我正在使用这样的东西:

var key = Array(xxx); // key.length = 16
var iv = new Buffer(16);
iv.fill(0);

var decipher = crypto.createDecipheriv("aes-128-ecb", key, iv);

当我搜索时,这个createDecipheriv("aes-128-ecb" 相当于 AES/CBC/PKCS5Padding。我虽然是decipher.setPadding(false),但我想我走错了路)。

【问题讨论】:

  • 您需要使用基于块的密码进行填充,除非每条消息都是块大小的精确倍数,AES 为 16 字节。典型的填充是 PKCS#7(née PKCS#5)。
  • 提供包含样本数据的minimal reproducible example
  • 还有一个“最爱”。
  • ECB 模式不使用 IV。 aes-128-ecb等同于AES/CBC/PKCS5Padding。 ECB 和 CBC 是加密模式,PKCS5Padding 在加密期间将填充字节添加到数据的末尾,因此它是块大小的倍数,并在解密时删除填充。花点时间研究一下 AES 加密、模式和填充。
  • “将此自定义加密从一种语言转换为另一种语言”是出了名的难以在 SO 上回答。我不再回答它们,因为它们太特定于一个代码库并且不能被未来的搜索者重用。如果您确实需要完成此类工作,我建议您与某人签订短期合同。很多人都在处理这种工作,包括我在内,如果算法简单并且您有工作版本和测试用例,通常不会很昂贵。

标签: node.js encryption cryptography node-crypto


【解决方案1】:

使用forge.cipher.createDecipher('AES-CBC', key); 完成了这项工作...

在内部它使用填充,但我可以解决在解密之前添加一些垃圾然后在内部填充后处理剩余垃圾的问题。

【讨论】:

  • 解密需要取消填充,而不是填充。通常,如果取消填充失败,则会引发错误。可以分享一下代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
相关资源
最近更新 更多