【发布时间】:2019-01-04 18:56:39
【问题描述】:
在 Laravel5 中,我通过以下 salt 对消息进行了加密,并在 API 中使用 base64 编码传递了 salt 值:
$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
我在this.countryList.response.salt 中收到的base64 编码盐值。
我的代码有错误吗?
请注意,如果我在 Laravel 中执行 $iv = '1212121212121212'; 并在 Angular 中执行 var salt = '1212121212121212';,它会返回预期的结果。
【问题讨论】: