我刚接触ruby,我正在开发一个应用程序,该应用程序将具有非常敏感的数据(来自其他网站的api密钥),并且我需要将其加密存储在db中,但并不随时知道它们。
让我自己解释一下:
主要问题是,如何加密它们以便以后可以使用它们(仍然不了解它们)?
很抱歉,这个问题很愚蠢,但我找不到解决办法,谢谢。
答案 0 :(得分:1)
为此,我使用了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
,但它在静止状态下(在数据库中)已加密,没有密钥就无法检索。
答案 1 :(得分:0)
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
方法,并将返回的加密值存储在DB中。
然后解密,将加密的密钥传递给decrypt
方法。
这是假设您的密钥库位于Rails.application.secrets.secret_key_base
答案的原始来源是here