我使用了以下代码,我发现在网上做一些基本的加密/解密。它按预期工作,但我有一个人谁的坚持在PHP解密它。
我试着自己做,但我的PHP有点生 rust 了,几年没有使用它了。
// Checking the crypto module
const crypto = require('crypto');
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);
// Encrypting text
function encrypt(text) {
let cipher = crypto.createCipheriv('aes-256-ctr', Buffer.from(key), iv);
let encrypted = cipher.update(text);
encrypted = Buffer.concat([encrypted, cipher.final()]);
return { iv: iv.toString('hex'), encryptedData: encrypted.toString('hex') };
}
// Decrypting text
function decrypt(text) {
let iv = Buffer.from(text.iv, 'hex');
let encryptedText = Buffer.from(text.encryptedData, 'hex');
let decipher = crypto.createDecipheriv('aes-256-ctr', Buffer.from(key), iv);
let decrypted = decipher.update(encryptedText);
decrypted = Buffer.concat([decrypted, decipher.final()]);
return decrypted.toString();
}
我认为它应该看起来像这样,但在测试时,我一直得到乱码输出。
openssl_decrypt(base64_decode($encryptedData), "aes-256-ctr", base64_decode($key), OPENSSL_RAW_DATA, hex2bin($iv));
1条答案
按热度按时间f87krz0w1#
要解密在Node.js中使用
aes-256-ctr
加密的PHP数据,您需要确保密钥IV和加密数据正确传输和解码。你可以这样做:确保你有来自Node.js的加密数据(
encryptedData
)、密钥(key
)和初始化向量(iv
)的十六进制编码版本。使用PHP中的
hex2bin()
函数将这些十六进制编码的字符串转换为二进制数据。最后,使用
openssl_decrypt
解密数据。请确保将
your_hex_encoded_encrypted_data
、your_hex_encoded_key
和your_hex_encoded_iv
替换为实际的十六进制编码字符串。