Below are two versions of codes that encrypt a text string. One is using Node JS, the other is using PHP. I am not sure why the output is different, where I expect the output should be the same.
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 output is:
Jx0UQhAEJSQ8Cwo=
PHP output is:
p50UwhAEJSS8C4o=
I have tried updating the encodings (e.g. from Ascii to latin1, or utf8, or binary), but I couldn't make my NodeJS output the same with PHP.
What do I need to do or modify my NodeJS codes to match the output from PHP?