如何存储加密数据?
How to store encrypted data?
我是 rails 上 ruby 的新手,我正在开发一个包含非常敏感数据(来自其他网站的 api 密钥)的应用程序,我需要将其加密存储在数据库中,但在任何时候都不知道它们。
让我解释一下:
- 表单要求用户提供他的 api 键
- 加密它们
- 将其存储在数据库中
主要问题是,我如何加密它们以便以后可以使用它们(仍然不知道它们)?
抱歉,如果这个问题很愚蠢,但我找不到解决方法,谢谢。
我为此使用了 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
我是 rails 上 ruby 的新手,我正在开发一个包含非常敏感数据(来自其他网站的 api 密钥)的应用程序,我需要将其加密存储在数据库中,但在任何时候都不知道它们。
让我解释一下:
- 表单要求用户提供他的 api 键
- 加密它们
- 将其存储在数据库中
主要问题是,我如何加密它们以便以后可以使用它们(仍然不知道它们)?
抱歉,如果这个问题很愚蠢,但我找不到解决方法,谢谢。
我为此使用了 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