2011-05-26 120 views
0

我使用下面的方法来加密一个数据键:加密器和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 \固定的(\ 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

所以我认为这是\打破它。

回答

2

我想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

+0

解密它。谢谢你,那有效。 – user715697 2011-05-27 07:35:14