首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在.NET中用零填充加密和用Node.js解密

在.NET中用零填充加密和用Node.js解密
EN

Stack Overflow用户
提问于 2015-06-29 15:24:48
回答 2查看 1.6K关注 0票数 0

我正试图用NodeJS解密一些数据。

该数据是用C#和AES-CBC-256算法创建的.keySize和blockSize为256,填充为ZeroPadding

我不能用Node.js解密它,错误是:

代码语言:javascript
复制
Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length

以下是我的javascript代码:

代码语言: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:

代码语言:javascript
复制
decipher.setAutoPadding(false);
//next line of code:
//decrypted = decipher.update(encryptedPayloadBuffer, 'base64', 'ascii');

但是我收到了这个错误:

代码语言:javascript
复制
Error: error:0606508A:digital envelope routines:EVP_DecryptFinal_ex:data not multiple of block length
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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位。

票数 0
EN

Stack Overflow用户

发布于 2015-06-29 17:30:54

看看密码Node.js文档就会发现:

decipher.setAutoPadding(auto_padding=true) 如果数据已加密而没有标准块填充,则可以禁用自动填充,以防止decipher.final检查和删除数据。只有当输入数据的长度是密码块大小的倍数时才能工作。您必须在将数据流到decipher.update之前调用它。

decipher.setAutoPadding(false)之前尝试decipher.update.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31119566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档