В Laravel5 я зашифровал сообщение с помощью следующей соли и передал значение соли в API с кодировкой base64:
$data = [];
$cipher = env('APP_CIPHER'); // AES-256-CBC
$iv = random_bytes(openssl_cipher_iv_length($cipher));
$key = env('APP_KEY'); // XXXXXZNUK5nhIMBbBEwKISqQ9ioXXXXX
$value = \openssl_encrypt(
json_encode($response),
$cipher, $key, 0, $iv
);
$data['data'] = $value;
$data['salt'] = base64_encode($iv);
return $data;
В Angular 6 я хочу расшифровать сообщение. Я сделал следующий код, но он показывает мне malformed utf-8 data
:
var key = CryptoJS.enc.Utf8.parse('XXXXXZNUK5nhIMBbBEwKISqQ9ioXXXXX');
var salt = atob(this.countryList.response.salt);
var iv = CryptoJS.enc.Utf8.parse(salt);
var decrypted = CryptoJS.AES.decrypt(this.countryList.response.data, key, {
keySize: 128 / 8,
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log('utf8 = ' + decrypted.toString(CryptoJS.enc.Utf8));
Сообщение / значения сохраняются в this.countryList.response.data
Значение соли в кодировке base64, которое я получил в this.countryList.response.salt
.
Любая ошибка в моем коде?
Обратите внимание: если я наберу $iv = '1212121212121212';
в Laravel и наберу var salt = '1212121212121212';
в Angular, он вернет ожидаемый результат.