【发布时间】: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