Зашифровать в узле и расшифровать в PHP 7 с помощью openssl - PullRequest
0 голосов
/ 06 июля 2018

Я нашел этот пост, как зашифровать в php и расшифровать в узле, и это работает: Шифрование в PHP 7, дешифрование в Node JS

Но у меня есть проблема, чтобы сделать то же самое в противоположном направлении.

Я пытался так:

Node:

const crypto = require('crypto');

const data = "data to encrypt";
const key = "315a5504d921f8327f73a356d2bbcbf1";
const iv = new Buffer(data.substring(0, 32), 'hex');

const cipher = crypto.createCipher('aes-256-cbc', key, iv);
let crypted = cipher.update(data, 'utf8', 'hex')
crypted += cipher.final('hex');
console.log(crypted);

PHP:

<?php
$encryptedMessage = '3aa3fc237aaf34a26482674cfcef1210';
$encryptionMethod = 'aes-256-cbc';
$secretHash = "315a5504d921f8327f73a356d2bbcbf1";

//To Decrypt
$iv_size = openssl_cipher_iv_length($encryptionMethod);
$iv = hex2bin(substr($encryptedMessage, 0, $iv_size * 2));

$decryptedMessage = openssl_decrypt(substr($encryptedMessage, $iv_size * 2), $encryptionMethod, $secretHash, 0, $iv);

echo "Decrypted: $decryptedMessage";

Но не работает, есть идеи, как заставить это работать?

1 Ответ

0 голосов
/ 06 июля 2018

IV должен быть случайным, и один и тот же IV должен использоваться как в процессе шифрования, так и в процессе дешифрования.

Ваш вектор инициализации основан на не зашифрованной строке, что является очень плохой идеей, поскольку вы будете пропускать часть своих незашифрованных данных, если отправите IV с зашифрованными данными.

...