Rails 3和加密字符串Gem - 获取OpenSSL :: Cipher :: CipherError:错误的解密错误

Jas*_*son 11 ruby ruby-on-rails

我在尝试以下时使用rails 3.2,Ruby 1.9.3和encrypted_strings gem:

"wC6234sdf234234cCY1Lag==\n".decrypt(:symmetric, :key => "mykeynottelling")
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

OpenSSL::Cipher::CipherError: bad decrypt
Run Code Online (Sandbox Code Playgroud)

然而,Ruby 1.8.7不会发生这种情况.我有点失落,有人看到可能导致这种情况的原因吗?

更新1:

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

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

并尝试在ruby 1.9.2中解密它我得到一个"糟糕的解密"错误,但我如果将它粘贴到ruby 1.8.7中的IRB控制台并尝试解密它,它的工作原理.

更新2:

我的ruby 1.9.3和1.8.7框之间的OpenSSL不同,这会导致此错误吗?

小智 1

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

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

文档中,

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