我正试图用NodeJS解密一些数据。
该数据是用C#和AES-CBC-256算法创建的.keySize和blockSize为256,填充为ZeroPadding。
我不能用Node.js解密它,错误是:
Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length以下是我的javascript代码:
decipher = crypto.createDecipheriv('aes-256-cbc', key, iv.slice(0, 16));
decrypted = decipher.update(encryptedPayloadBuffer, 'base64', 'ascii');
decrypted += decipher.final('ascii');
decipher = null;
return decrypted;我用图书馆的“密码”。我在某个地方读到node.js解密只适用于PKSC7填充。是真的吗?我无法更改C#项目中的任何内容,必须在节点端找到解决方案。
你能帮帮我吗?
编辑:我尝试用以下方法禁用autoPadding:
decipher.setAutoPadding(false);
//next line of code:
//decrypted = decipher.update(encryptedPayloadBuffer, 'base64', 'ascii');但是我收到了这个错误:
Error: error:0606508A:digital envelope routines:EVP_DecryptFinal_ex:data not multiple of block length发布于 2015-06-30 08:15:26
AES和Rijndael是有区别的。两者都指定128、192和256位的密钥大小,但只有Rijndael提供所有三个块大小: 128、192和256位。AES实际上是固定块大小为128位的Rijndael。
Node.js使用OpenSSL提供所有可用的密码(crypto.getCiphers())。如果您的版本中没有rijndael实现,那么您就不能使用node.js的Crypto模块。您需要找到实现Rijndael的节点模块,或者只需在C#代码中将块大小设置为128位。
发布于 2015-06-29 17:30:54
看看密码Node.js文档就会发现:
decipher.setAutoPadding(auto_padding=true) 如果数据已加密而没有标准块填充,则可以禁用自动填充,以防止decipher.final检查和删除数据。只有当输入数据的长度是密码块大小的倍数时才能工作。您必须在将数据流到decipher.update之前调用它。
在decipher.setAutoPadding(false)之前尝试decipher.update.
https://stackoverflow.com/questions/31119566
复制相似问题