Ruby on rails cryptoJS和openSSL(ruby)之间的同步AES加密

Ruby on rails cryptoJS和openSSL(ruby)之间的同步AES加密,ruby-on-rails,encryption,openssl,aes,cryptojs,Ruby On Rails,Encryption,Openssl,Aes,Cryptojs,使用CryptoJS或Ruby的OpenSSL加密时,我无法得到相同的结果 JS代码 k=CryptoJS.enc.Hex.parse('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb'); iv=CryptoJS.enc.Hex.parse('3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d'); r=CryptoJS.AES.enc

使用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));
在铁轨上

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的方式可能有所不同。

谢谢!这也有助于将来的参考,在ruby中传递给密码的密钥和iv必须转换为二进制,不能指定为普通十六进制。@WKx-wow。我永远也想不到。很高兴你留下这个评论。我差点就要结束这一切了。