首页 > 解决方案 > Rails Lockbox - Lockbox Gem - 未定义方法:解密

问题描述

我是数据安全的新手,正在尝试将 gem Lockbox集成到我的 Rails 应用程序中。

我的目标是创建一个包含加密个人信息的多步骤表单。我目前正在进行开发,并发现在每一步检查我的对象非常有帮助。但是,在引入 Lockbox 后,由于解密错误,我失去了检查对象的能力。

不幸的是,我没有找到很多博客、堆栈上的帖子或深入的文档来帮助我理解和调试它,而且我一定不能完全理解 gem 的源代码。

我已经通过在视图或控制器中解密并尝试以稍微不同的方式解密对象的各个部分来解决这个问题,但无论哪种方式都会出错。

step2.html.erb

<% lockbox = Lockbox.new(key: Rails.application.credentials.lockbox[:master_key] ) %>
<% @example_decrypted = lockbox.decrypt(@example.example.attributes) %>
<%= @example_decrypted.inspect %>

我在尝试解密属性的行上遇到此错误:

ExampleController#step2p 中的 Lockbox::DecryptionError

解密失败

我还在 step2.html.erb 上尝试了以下操作,这也产生了上述错误

<%= @example_decrypted = (@example.example.attributes.encrypted_attribute) %>

同样,在将加密引入模型之前,上述方法工作得很好。

以下代码在我的 rails 控制台中按预期工作

lockbox = Lockbox.new(key: Rails.application.credentials.lockbox[:master_key] )
=> #<Lockbox::Encryptor:0x000055c8f3faf458 @encode=nil, @boxes=[#<Lockbox::Box:0x000055c8f3faf390>]>
ciphertext = lockbox.encrypt("hello")
=> "vy\xCE\xC7\xB1\x91\x8E\xFE\xCC\x84\xEFl\xE5\x9A\x93\x97\xD9l\xC8\xC3:\r\xE7o\etc..."
lockbox.decrypt(ciphertext)
=> "hello"

有什么见解吗?

标签: ruby-on-railsrubyencryptionrubygems

解决方案


对于模型属性,请确保您使用的是属性密钥(主密钥永远不会用于直接加密数据)。

key = Lockbox.attribute_key(table: "users", attribute: "email_ciphertext")

更多信息:https ://github.com/ankane/lockbox/#key-separation

为方便起见,您还可以使用:

User.decrypt_email_ciphertext(user.email_ciphertext)

推荐阅读