如何存储加密数据?

How to store encrypted data?

我是 rails 上 ruby 的新手,我正在开发一个包含非常敏感数据(来自其他网站的 api 密钥)的应用程序,我需要将其加密存储在数据库中,但在任何时候都不知道它们。

让我解释一下:

  1. 表单要求用户提供他的 api 键
  2. 加密它们
  3. 将其存储在数据库中

主要问题是,我如何加密它们以便以后可以使用它们(仍然不知道它们)?

抱歉,如果这个问题很愚蠢,但我找不到解决方法,谢谢。

我为此使用了 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

但它是静态加密的(在数据库中),没有密钥就无法检索。

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

答案的原始来源是here