PHP从Node.js解密加密

c7rzv4ha  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(111)

我使用了以下代码,我发现在网上做一些基本的加密/解密。它按预期工作,但我有一个人谁的坚持在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));
f87krz0w

f87krz0w1#

要解密在Node.js中使用aes-256-ctr加密的PHP数据,您需要确保密钥IV和加密数据正确传输和解码。你可以这样做:
确保你有来自Node.js的加密数据(encryptedData)、密钥(key)和初始化向量(iv)的十六进制编码版本。
使用PHP中的hex2bin()函数将这些十六进制编码的字符串转换为二进制数据。
最后,使用openssl_decrypt解密数据。

<?php
// Your hex-encoded encrypted data, key, and iv from Node.js
$encryptedData = "your_hex_encoded_encrypted_data";
$key = "your_hex_encoded_key";
$iv = "your_hex_encoded_iv";

// Convert hex-encoded values to binary
$key = hex2bin($key);
$iv = hex2bin($iv);
$encryptedData = hex2bin($encryptedData);

// Decrypt using openssl_decrypt
$decrypted = openssl_decrypt($encryptedData, "aes-256-ctr", $key, OPENSSL_RAW_DATA, $iv);

// Output the decrypted data
echo $decrypted;
?>

请确保将your_hex_encoded_encrypted_datayour_hex_encoded_keyyour_hex_encoded_iv替换为实际的十六进制编码字符串。

相关问题