Rails Lockbox - Lockbox Gem - Неопределенный метод: расшифровать - PullRequest
0 голосов
/ 12 июля 2020

Я новичок в защите данных и пытаюсь интегрировать драгоценный камень Lockbox в свое приложение Rails.

Моя цель - создать многоступенчатую форму, которая включает зашифрованную личную информацию . В настоящее время я занимаюсь разработкой и считаю чрезвычайно полезным проверять свой объект на каждом этапе. Однако после введения Lockbox я потерял возможность проверять объект из-за ошибки дешифрования.

К сожалению, я не нашел много блогов, сообщений в стеке или подробной документации, которые могли бы помочь мне с пониманием и отладкой этого, и я не должен полностью понимать исходный код для драгоценного камня.

Я подошел к решению этой проблемы, расшифровывая в представлении или в контроллере и пытаясь расшифровать различные части объекта в несколько разными способами, но в любом случае возникает ошибка.

step2. html .erb

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

Я вижу эту ошибку в строке, которая пытается расшифровать атрибуты:

Lockbox :: DecryptionError в ExampleController # step2p

Ошибка дешифрования

Я также пробовал следующее на шаге 2. 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"

Есть идеи?

1 Ответ

0 голосов
/ 28 июля 2020

Для атрибутов модели убедитесь, что вы используете ключ атрибута (главный ключ никогда не используется для прямого шифрования данных).

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

Подробнее: https://github.com/ankane/lockbox/#key -separation

Для удобства можно также использовать:

User.decrypt_email_ciphertext(user.email_ciphertext)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...