我使用following functions来加密/解密NodeJS,它们工作正常。但是我无法用PHP解密数据,以便在同一项目的某些部分使用。
NodeJS:
function encrypt(text){
var cipher = crypto.createCipher('aes-256-cbc','strong-key')
var crypted = cipher.update(text,'utf8','hex')
crypted += cipher.final('hex');
return crypted;
}
function decrypt(text){
var decipher = crypto.createDecipher('aes-256-cbc','strong-key')
var dec = decipher.update(text,'hex','utf8')
dec += decipher.final('utf8');
return dec;
}
我在PHP中尝试的是:
openssl_decrypt('fdf32748aa4ce37fc600bbe7be14bfc7', 'AES-256-CBC', "strong-key");
但它总是返回false/empty。我很感激你让我知道我做错了什么。
编辑:例如,用PHP解密28e1dfdedac467a015a9c8720d0a6451
应该返回“Hello World”,使用与上面相同的密钥。
1条答案
按热度按时间2vuwiymt1#
请确保您的传入数据是正确的格式(即没有任何额外的编码层)。它看起来像十六进制,但它不是openssl_decrypt所期望的。
下面是一个来回的PHP示例(使用IV,你也应该这样做):
编辑,更具体的例子,强调了解你的编码的重要性:
这里我们知道所有的输出都是十六进制的,所以我们可以在PHP端将它们重新格式化为二进制数据:
最终编辑:现在有了工作密钥派生实现。这成功地解密了你的“Hello world”: