【问题标题】:Rails Lockbox - Lockbox Gem - Undefined Method: DecryptRails Lockbox - Lockbox Gem - 未定义方法:解密
【发布时间】:2023-03-14 05:33:02
【问题描述】:

我是数据安全的新手,正在尝试将 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 %>

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

ExamplesController#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"

有什么见解吗?

【问题讨论】:

  • 这看起来像是你可能想要在你的控制器而不是你的视图中的代码。除此之外,您确定在这种情况下@example.example.attributes 是非零并且包含加密的粘性物吗?您能否编辑您的问题以显示加密发生的位置和方式以及显示step2 的控制器?

标签: ruby-on-rails ruby encryption rubygems


【解决方案1】:

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

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

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

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

User.decrypt_email_ciphertext(user.email_ciphertext)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    相关资源
    最近更新 更多