下面是加密文本字符串的两种版本的代码。一种是使用Node JS,另一种是使用PHP。我不确定输出为何不同,我希望输出应该相同。
Nodejs v11.9.0
const crypto = require('crypto');
const secret_data = 'httpswwwcom';
const CIPHER_METHOD = 'aes-256-ctr';
const key = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
const iv = 'BBBBBBBBBBBBBBBB';
const cipher = crypto.createCipheriv(CIPHER_METHOD, key, iv);
const encrypted = cipher.update(secret_data , 'ascii', 'ascii') + cipher.final('ascii');
console.log(Buffer.from(encrypted).toString('base64'));
PHP 7.3.2
const secret_data = 'httpswwwcom';
const CIPHER_METHOD = 'aes-256-ctr';
const key = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
const iv = 'BBBBBBBBBBBBBBBB';
$encrypt= openssl_encrypt(
secret_data ,
CIPHER_METHOD,
key,
OPENSSL_RAW_DATA,
iv
);
echo base64_encode($encrypt);
Nodejs的输出是:
Jx0UQhAEJSQ8Cwo=
PHP输出为:
p50UwhAEJSS8C4o=
我尝试更新编码(例如,从Ascii到latin1或utf8或二进制),但是我无法使NodeJS的输出与PHP相同。
我需要做什么或修改我的NodeJS代码以匹配PHP的输出?