使用phpseclib使用AES进行加密,并使用CryptoJS进行解密

罗伯托14

我正在尝试在CBC模式下使用phpseclib AES加密字符串(库的默认设置):

$cipher = new Crypt_AES();
$cipher->setKey('abcdefghijklmnop');
$cipher->setIV(crypt_random_string($cipher->getBlockLength() >> 3));
$cipher->encrypt("hello world")

然后,我需要使用CryptoJS或类似的方法在nodejs上解密。我想这个问题与每个库的编码输出有关。

有没有人有一个如何实现此互操作性场景的可行示例?

可以使用其他库,例如Crypto。Base64输出示例是MF9lCR4DaW1R0adIe03VEw==

因此,想法是解密如下:

var helloWorld = CryptoJS.AES.decrypt("MF9lCR4DaW1R0adIe03VEw==", key).toString();
Artjom B.

在解密期间,您需要先前生成的IV。它不必是秘密的,但必须是不可预测的(在您的情况下)。您可以将其与密文一起发送。一种常见的方法是将其放在密文之前,并在解密过程中将其切成片。

CryptoJS支持两种类型的加密。如果您将密钥作为字符串传递,它将使用OpenSSL的密钥派生函数派生带有盐的新密钥。您不想要那样,因为您使用的是显式密钥。为此,您需要将密钥作为WordArray(CryptoJS的本机二进制数据结构)传递。此外,密文应为OpenSSL格式的字符串或CipherParams对象:

var message = CryptoJS.AES.decrypt({
    ciphertext: CryptoJS.enc.Base64.parse("MF9lCR4DaW1R0adIe03VEw==")
}, CryptoJS.enc.Utf8.parse('abcdefghijklmnop'), {
    iv: iv // retrieve the IV somehow
}).toString(CryptoJS.enc.Utf8);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章