11

当尝试以下操作时,我正在使用 rails 3.2、Ruby 1.9.3 和 encrypted_strings gem:

"wC6234sdf234234cCY1Lag==\n".decrypt(:symmetric, :key => "mykeynottelling")

我收到此错误:

OpenSSL::Cipher::CipherError: bad decrypt

然而,Ruby 1.8.7 不会发生这种情况。我对此有点迷茫,有没有人看到可能导致这种情况的原因?

更新 1:

如果我在 ruby​​ 1.8.7 中加密一个字符串:

"password".encrypt(:symmetric, :key => "www.buyandsell.ie") # output is "hr0aZUZTa7x1gQL8ZMI/dQ==\n"

并尝试在 ruby​​ 1.9.2 中解密它,我得到一个“解密错误”错误,但如果我将它粘贴到我的 ruby​​ 1.8.7 中的 IRB 控制台并尝试解密它,它可以工作。

更新 2:

OpenSSL 在我的 ruby​​ 1.9.3 和 1.8.7 盒子之间是不同的,这会导致这个错误吗?

4

1 回答 1

1

从 1.9.3 升级到 2.2.2 处理对称加密gem 时,我遇到了类似的问题。根本原因最终是 gem 使用了 Ruby 的编组库,该库在版本之间发生了变化。

在升级到 2.2.2 之前,我最终不得不解密 1.9.3 中的所有数据,这被证明是一个悲惨的经历。

文档中,

封送数据具有与对象信息一起存储的主要和次要版本号。在正常使用中,marshaling 只能加载使用相同的主要版本号和相等或更低的次要版本号写入的数据。

于 2015-10-22T01:21:12.423 回答