2011-05-26 118 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