1

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?

5
  • I dont know how how work the encription on Nodejs... but check the createCipheriv function if your original iv still a string or the function convert your original iv to hex or whatever. Commented Mar 4, 2019 at 14:33
  • @MTK When check the documentation for both Node and PHP, both the IV and Key can be accepted as string. If I convert IV to hex in Nodejs like Buffer.from(iv).toString('hex'), NodeJS will throw Error: Invalid IV length Commented Mar 4, 2019 at 14:45
  • I know that can be accepted as string but mi question is if createCipheriv don't change (inside on process) your original string to another type. I do'nt suggest you to change manually the iv type. I suggest to chek inside createCipheriv function if your original LTvVTPHXt1tXJj5H still the same as you imput (sorry for mi English) Commented Mar 4, 2019 at 14:52
  • Is there a way to check? Because crypto.createCipheriv comes with nodeJS not 3rd party library I have installed. Commented Mar 4, 2019 at 15:02
  • have a look at here Commented Mar 4, 2019 at 15:21

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.