在JavaScript上使用AES-128位加密时不同

时间:2019-05-15 04:33:11

标签: aes cryptojs

我在PHP中使用CBC方法使用AES-128位进行加密,但是当我在javascript中尝试使用它们时,它们会产生不同的输出

我通过在php上修改代码来尝试在javascript上使用crypto-js

我制作的php代码:

$secretKey = "someivtextforaes";
$ivKey = 'somesecretkeytxt';
$token = 'BD';
$cipher = "AES-128-CBC";
$ciphertext_raw = openssl_encrypt($token, $cipher, $secretKey, false, $ivKey);
return $ciphertext_raw;

此输出为: rtFKwdZt4wzgRsgYG / LbiQ ==

我使用crypto-js在javascript上尝试此方法,这是代码:

let secretKey = "someivtextforaes";
let ivKey = 'somesecretkeytxt';
let token = 'BD';
let cipherData = CryptoJS.AES.encrypt(token, secretKey, { iv: ivKey });
console.log(cipherData.toString())

但它们具有不同的输出: U2FsdGVkX1 + QsOS9lM2F2Emq

我希望加密输出相同,有人可以弄清楚吗?

1 个答案:

答案 0 :(得分:0)

对于PHP代码,代码和输出不一致。当前代码返回输出50CqXivvXXTfw276AZ8IjA==(仅在键和IV交换时才获得发布的输出)。

在JavaScript代码密钥中,IV必须以WordArray的形式传递,例如

let secretKey = CryptoJS.enc.Latin1.parse("...");

当前,密钥以字符串形式传递,因此被解释为密码短语,从中生成密钥和IV(请参见 The Cipher Input )。