ruby-on-rails - 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"
有什么见解吗?
解决方案
对于模型属性,请确保您使用的是属性密钥(主密钥永远不会用于直接加密数据)。
key = Lockbox.attribute_key(table: "users", attribute: "email_ciphertext")
更多信息:https ://github.com/ankane/lockbox/#key-separation
为方便起见,您还可以使用:
User.decrypt_email_ciphertext(user.email_ciphertext)
推荐阅读
- google-sheets - 将 B & Q 列移动到新选项卡,然后连接到新单元格
- apache-kafka-streams - kafka-streams 无法在 Windows 上创建状态目录
- azure - 从 Visual Studio Code 构建并运行 Vue.js 应用程序作为 Azure 应用程序服务
- python - 数据规范化正在破坏代码
- python - 如何在python字典中计算重复键的总和?
- javascript - 我有一个按顺序排列的带有计数和字母的字符串我必须根据它们的计数打印字母
- java - 尝试通过 scala/spark 应用程序连接到 postgres 数据库时出现 ClassNotFoundException
- arrays - 将数组从 redux 存储导入到表中。反应,js
- python - 如何在带有嵌套字典的嵌套循环中正确使用字典“.update”函数
- mysql - 如何获取列中元素的 id 和数量,即使它们在 SQL 中为 0