Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AES在.NET中使用零填充进行加密,并使用Node.js进行解密_Javascript_C#_Node.js_Encryption_Cryptography - Fatal编程技术网

Javascript AES在.NET中使用零填充进行加密,并使用Node.js进行解密

Javascript AES在.NET中使用零填充进行加密,并使用Node.js进行解密,javascript,c#,node.js,encryption,cryptography,Javascript,C#,Node.js,Encryption,Cryptography,我正试图用NodeJS解密一些数据 该数据是使用C#和AES-CBC-256算法创建的。 keySize和blockSize为256,Padding为零Padding 我无法使用Node.js对其进行解密,错误为: Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length 以下是我的javascript代码: decipher = crypto.createDecip

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

该数据是使用C#和AES-CBC-256算法创建的。 keySize和blockSize为256,Padding为零Padding

我无法使用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#项目中的任何内容,我必须在节点端找到解决方案

你能帮我吗

编辑:我尝试使用以下命令禁用自动添加:

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
看看下面的例子可以发现:

decipher.setAutoPadding(自动填充=true)

如果数据已加密,而未加密,则可以禁用自动填充 标准块填充,防止破译。最终检查和 移除它。仅当输入数据的长度是的倍数时才能工作 密码的块大小。您必须在将数据流传输到之前调用此函数 破译。更新


请在破译更新之前尝试破译.setAutoPadding(false)。

AES和Rijndael之间存在差异。两者都指定128、192和256位的密钥大小,但只有Rijndael提供所有三种块大小:128、192和256位。AES实际上是Rijndael,具有128位的固定块大小


Node.js使用OpenSSL提供所有可用的密码(
crypto.getCiphers()
)。如果您的版本没有rijndael实现,那么您就不能使用node.js的加密模块。您需要找到一个实现Rijndael的节点模块,或者在C代码中将块大小设置为128位。

如果块大小为256位,则不是AES。请弄清楚你在用什么。@ArtjomB。很可能您可以强制C#AES实现执行Rijndael-256,但我不确定。@ArtjomB我确定它是AES。实现方法如下:解密后不要忘记删除零填充。@Jim Flood。谢谢你的回答。我已经试过了,但是我遇到了这个错误:数据不是块长度的倍数谢谢,我现在理解了这个问题。我搜索了加密以外的另一个节点模块,但目前找不到。我希望有人知道它,并将它写在这里。