据说CryptoJS与OpenSSL兼容,可以注意到running the demo。
现在我想使用OpenSSL EVP API实现相同的行为:使用密码短语将字符串填充并与CryptoJS交换结果,CryptoJS必须能够解密它(知道密码)。
我的疑问是关于交换iv的标准方法(我认为这是CryptoJS和OpenSSL兼容性的关键)。
我应该如何发送iv以及加密的消息?
PS:请不要担心客户端加密/解密,因为我对用例感到满意。
更新
使用OpenSSL命令行工具加密
$ echo "Hello World" | openssl enc -aes-256-cbc -pass pass:"Secret Passphrase" -e -base64
U2FsdGVkX18Z8dTy1NR6 /克+ 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
我以the Saju Pillai example作为起点。
更新3
我的问题是关于加密文本的“可互换性”。 我得到以下部分
我希望向客户端发送一个字符串,该字符串必须能够解密字符串并获取解密过程所需的部分(这正是我在CryptoJS和OpenSSL之间观察到的)