Зашифровать с помощью Crypto. JS и расшифровать с помощью PHP 7.3 - PullRequest
1 голос
/ 18 июня 2020

Я обновляю свой код с PHP 5.6 до 7.3, который является плагином Woocommerce для моего приложения Ioni c. Тем временем я заметил, что mcrypt_decrypt устарел в PHP 7. Я попытался выяснить, как изменить свой код, но он по-прежнему не возвращает ту же строку. Вот мой код шифрования в приложении:

var password = this.password;
if (this.appConfig.App_Secret != '') {
  var key = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(this.appConfig.App_Secret).toString());
  var iv = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(this.appConfig.App_Secret).toString().substr(0, 16));
  password = CryptoJS.AES.encrypt(password, key, { iv: iv }).toString();
}

А это мой старый код дешифрования в PHP:

$iv=substr(md5(get_option('sow_rest_api_secret')),0,16);
$key = md5(get_option('sow_rest_api_secret'));
$data = base64_decode($decrypt_str);
$result = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
return rtrim($result,"\0");

Я меняю строку с переменной $ result с * От 1007 *

$result = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);

до

$result = openssl_decrypt($data, 'aes-128-gcm', $key, $options=OPENSSL_RAW_DATA, $iv);

Можете ли вы оказать поддержку?

1 Ответ

1 голос
/ 18 июня 2020

Цитирование this php. net comment :

Кроме того, MCRYPT_RIJNDAEL_256 не является AES-256, это другой вариант блочного шифра Rijndael. Если вы хотите AES-256 в mcrypt, вы должны использовать MCRYPT_RIJNDAEL_128 с 32-байтовым ключом. OpenSSL делает более очевидным, какой режим вы используете (например, 'aes-128-cb c' vs 'aes-256-ctr').

Это означает, что вы раньше использовали AES-256, а не AES-128.

Кроме того, Crypto JS по умолчанию использует режим CB C, как правильно отметил @Topaco.

Объединение:

$result = openssl_decrypt($data, 'aes-256-cbc', $key, $options=OPENSSL_RAW_DATA, $iv);

должно дать тот же результат, что и ваше предыдущее mcrypt_decrypt решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...