在 cryptoJS 和 openSSL 之间同步 AES 加密 (ruby)

sync AES ecnryption between cryptoJS and openSSL (ruby)

使用 CryptoJS 或 Ruby 的 OpenSSL

加密时,我无法得到相同的结果

JS代码

k=CryptoJS.enc.Hex.parse('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb');
iv=CryptoJS.enc.Hex.parse('3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d');
r=CryptoJS.AES.encrypt("hello", k, { iv: iv });
alert(r.ciphertext.toString(CryptoJS.enc.Base64));

并在 Rails

cipher = OpenSSL::Cipher::AES.new(256, :CBC)
cipher.encrypt
cipher.key = 'ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb'
cipher.iv = '3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d'
enc = cipher.update('hello')+cipher.final
puts Base64.encode64(enc)

这两个结果没有给出相同的加密信息。

IV 必须为 16 字节或 128 位长,因为 AES 的块大小为 128 位。您当前的 IV 有 32 个字节。因此,CryptoJS 和 OpenSSL 如何处理过长的 IV 之间可能存在差异。