3

据说 CryptoJS 与 OpenSSL 兼容,运行演示时可以注意到这一点。

现在我想使用 OpenSSL EVP API 实现相同的行为:使用密码对字符串进行加密,并与必须能够解密它的 CryptoJS 交换结果(知道密码)。

我怀疑交换 iv 的标准方式(我认为这是 CryptoJS 和 OpenSSL 兼容性的关键)。

我应该如何将 iv 与加密消息一起发送?

PS:请不要担心客户端加密/解密,因为我对用例很满意。

更新

使用 OpenSSL 命令行工具加密

$ echo "Hello World" | openssl enc -aes-256-cbc -pass pass:"Secret Passphrase" -e -base64

U2FsdGVkX18Z8dTy1NR6/gm+9IxmbuT8iCblIjvV76E=

用 CryptoJS 解密

var de = CryptoJS.AES.decrypt("U2FsdGVkX18Z8dTy1NR6/gm+9IxmbuT8iCblIjvV76E=","Secret Passphrase",{keySize: 256/32});

de.toString(CryptoJS.enc.Utf8); // output: Hello World

在我的用例中,我想使用 EVP API 而不是 openssl 命令行工具进行加密。我错过了如何将密文、iv 和 salt 完全“打包”在一个字符串中,就像在 "U2FsdGVkX18Z8dTy1NR6/gm+9IxmbuT8iCblIjvV76E="

更新 2

我以Saju Pillai 为例作为起点。

更新 3

我的问题是关于密文的“可互换性”。我得到以下部分

  • 键: 79A38D896D90DBFE5E151A326602BC3A4A9081F3F9BEAC08EF058B96BA51CF19
  • iv : 76614325D3DA73698DDD220431AE298E00000000000000000000000000000000
  • 密文: QfCKTtVPlDcTOhC5ylwKFQ==

我希望向客户端发送一个字符串,该字符串必须能够破译字符串并获得解密过程所需的部分(这正是我在 CryptoJS 和 OpenSSL 之间观察到的)

4

0 回答 0