Как хранить зашифрованные данные? - PullRequest
0 голосов
/ 16 ноября 2018

Я новичок в ruby ​​on rails и разрабатываю приложение, в котором будут храниться очень конфиденциальные данные (ключи API от других веб-сайтов), и мне нужно хранить их в зашифрованном виде в БД, но не знать их в любое время.

Позвольте мне объяснить:

  1. Форма запрашивает у пользователя его ключи API
  2. Зашифруйте их
  3. Сохраните в БД

Главный вопрос: как мне зашифровать их таким образом, чтобы я мог использовать их позже (все еще не зная их)?

Извините, если вопрос глуп, но я могуНе могу найти способ сделать это, и спасибо.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018
def encrypt text
  text = text.to_s unless text.is_a? String

  len   = ActiveSupport::MessageEncryptor.key_len
  salt  = SecureRandom.hex len
  key   = ActiveSupport::KeyGenerator.new(Rails.application.secrets.secret_key_base).generate_key salt, len
  crypt = ActiveSupport::MessageEncryptor.new key
  encrypted_data = crypt.encrypt_and_sign text
  "#{salt}$$#{encrypted_data}"
end

def decrypt text
  salt, data = text.split "$$"

  len   = ActiveSupport::MessageEncryptor.key_len
  key   = ActiveSupport::KeyGenerator.new(Rails.application.secrets.secret_key_base).generate_key salt, len
  crypt = ActiveSupport::MessageEncryptor.new key
  crypt.decrypt_and_verify data
end

Передайте ключ методу encrypt и сохраните возвращенное зашифрованное значение в БД.Затем для расшифровки передайте зашифрованный ключ методу decrypt.

Предполагается, что база секретных ключей находится в Rails.application.secrets.secret_key_base

Первоначальный источник ответа - здесь

0 голосов
/ 16 ноября 2018

Я использовал attr_encrypted для этого.Отлично работает.

  class User
    attr_encrypted :ssn, key: 'This is a key that is 256 bits!!'
  end

Затем вы работаете с ssn, как если бы это было простое поле

 user = User.find(1)
 puts user.ssn

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

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