ruby on rails-Encryptor和MySQL,将密钥保存到数据库/编码中



我使用以下方法加密数据密钥:

data_key      = ActiveSupport::SecureRandom.random_number(99999999)
secret_key    = Digest::SHA256.hexdigest(params[:user][:password])
encrypted_key = Encryptor.encrypt(data_key.to_s, :key => secret_key)

encrypted_key将等于,例如:

"%\x807\x1F\xFE.N\xEC\x85\x04\xEA\xED(\xD6\xFC\xC9"

如果我尝试使用将其保存在MySQL数据库中

Key.create(:encrypted_key => encrypted_key)

保存到:encrypted_key列中的唯一值是:

%

我试过另一个:

"2T`E\xBDP\x12\x81\x00U\x92\xFE\x1A\xDC=\xA4"

哪个存储在列中:

2T`E

所以我认为是它打破了它。

我认为MySQL可能只能存储ASCII字符。'\x???'字符是unicode字符。

我建议Base64在存储密钥之前对其进行编码:

data_key      = ActiveSupport::SecureRandom.random_number(99999999)
secret_key    = Digest::SHA256.hexdigest(params[:user][:password])
encrypted_key = Encryptor.encrypt(data_key.to_s, :key => secret_key)
encoded_key   = Base64.encode64(encrypted_key)
Key.create(:encrypted_key => encoded_key)

这将把所有非ASCII字符编码为纯ASCII。

当您从数据库中读取密钥时,在使用`Base64.decode64

解密之前,您需要对其进行解码

相关内容

  • 没有找到相关文章

最新更新