【问题标题】:sync AES ecnryption between cryptoJS and openSSL (ruby)在 cryptoJS 和 openSSL (ruby) 之间同步 AES 加密
【发布时间】:2015-04-24 15:18:21
【问题描述】:

使用 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)

这 2 个结果没有给出相同的加密消息。

【问题讨论】:

    标签: ruby-on-rails encryption openssl aes cryptojs


    【解决方案1】:

    IV 必须为 16 字节或 128 位长,因为 AES 的块大小为 128 位。您当前的 IV 有 32 个字节。因此,CryptoJS 和 OpenSSL 处理太长的 IV 的方式可能有所不同。

    【讨论】:

    • 谢谢!这也有助于将来的参考,在 ruby​​ 中传递给密码的密钥和 iv 必须转换为二进制,并且不能分配为纯十六进制。
    • @WKx 哇。我永远也想不通。很高兴你留下了这个评论。我已经快要结束这一切了。
    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 2021-12-20
    • 2014-08-17
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多