Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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
AES在PHP中加密,在Node.js中使用OpenSSL/decrypt_Php_Node.js_Php Openssl - Fatal编程技术网

AES在PHP中加密,在Node.js中使用OpenSSL/decrypt

AES在PHP中加密,在Node.js中使用OpenSSL/decrypt,php,node.js,php-openssl,Php,Node.js,Php Openssl,我正在使用PHP和Nodejs使用OpenSSL进行对称加密。PHP使用OpenSSL库,Node.js解密基于实现的加密。问题是Node.js中解密的文本只有部分正确 用于加密的PHP函数 nodejs中的解密 结果 我猜问题可能与填充有关,但老实说,我不知道 感谢阅读帮助 在节点代码中,您缺少消息的最后一部分: var dec = crypto.createDecipheriv('aes-256-cbc',key,iv); var dec_data = dec.update(cipher,'

我正在使用PHP和Nodejs使用OpenSSL进行对称加密。PHP使用OpenSSL库,Node.js解密基于实现的加密。问题是Node.js中解密的文本只有部分正确

用于加密的PHP函数 nodejs中的解密 结果 我猜问题可能与填充有关,但老实说,我不知道


感谢阅读帮助

在节点代码中,您缺少消息的最后一部分:

var dec = crypto.createDecipheriv('aes-256-cbc',key,iv);
var dec_data = dec.update(cipher,'base64','utf8') + dec.final('utf8');
另外,解码时使用base64,而不是二进制(因为您可能会陷入这里提到的场景)

我在另一篇文章中使用了此示例代码,请查看:

问候,,
Ignacio

你在PHP文档页面上看到了吗?那么你的意思是我必须自己在文本中添加(PKCS#7)填充,因为openssl#u encrypt本身不这样做?mcrypt文档页面上有一个提供了这样一个实现的函数,但这对我来说不起作用。我不知道
mcrypt
函数是否与PHP中的
openssl
函数兼容。我不知道是否有办法解决这个问题(因为我不知道如何手动填充结果,似乎应该有一个标记),但建议使用而不是使用
openssl
函数。请注意,
openssl\u public/private\u encrypt
函数具有填充标志。我想避免使用phpseclib,并尝试使用本机php libs,但phpseclib的工作方式非常有魅力!也许我会再试试openssl库,但无论如何:谢谢!你也许可以查看源代码,找出他们是如何让它工作的;它实际上默认为本机ssl库。这可能会给你一些线索。
var cipher = new Buffer(data.cipher, 'base64');
var iv = new Buffer(data.iv, 'base64');
// the password is the same returned by the php function, so 100% correct
var key = new Buffer(data.pw, 'base64');
            
var dec = crypto.createDecipheriv('aes-256-cbc',key,iv);
var dec_data = dec.update(cipher,'binary','utf8');
    
// the script is based on socket.io 
socket.emit('debug',{decrypted : dec_data});
# Encrypting in php...
>> encrypt('1. Lorem ipsum dolor sit amet! 2. Lorem ipsum dolor sit amet!', 'password');

# ...makes nodejs giving me something like
>> 1, 6+r@o ipsum /olor sit amet! 2. Lorem ipsum do
var dec = crypto.createDecipheriv('aes-256-cbc',key,iv);
var dec_data = dec.update(cipher,'base64','utf8') + dec.final('utf8');