шифрование — зашифрованная строка в Crypto js не расшифровывается при переполнении стека

Я использую следующий код JS для шифрования строки

var text = 'should be decrypted!';
var key = 'HighlySecretKeyForJsEncryption!!';
var encrypted = CryptoJS.AES.encrypt(text, key);
console.log(encrypted.toString());

выход: U2FsdGVkX19vf + s6 / + eB8A + 3iKFCl1A0e + oe0BSbcMVGxb64FL35Q3CB / LZNu4ng

и это то, что я сделал в PHP, чтобы расшифровать это

function decrypt($toDecrypt) {
$key = "HighlySecretKeyForJsEncryption!!";
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$toDecrypt = base64_decode($toDecrypt);
return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, substr($toDecrypt, $iv_size), MCRYPT_MODE_CBC, substr($toDecrypt, 0, $iv_size)));
}

Но это не работает, это дает мне строку мусора.

0

Решение

От документы:

var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");

CryptoJS поддерживает AES-128, AES-192 и AES-256. Это подберет
вариант по размеру ключа, который вы передаете. Если вы используете фразу-пароль,
тогда он сгенерирует 256-битный ключ.

Вам, вероятно, нужно передать константу MCRYPT_RIJNDAEL_256 при расшифровке php-стороны

Подробнее о шифровании / дешифровании AES в php: https://stackoverflow.com/a/3422787/4499267

-1

Другие решения

Других решений пока нет …