Encryptor и MySQL, сохранение ключа в базе данных / кодировка? - PullRequest
0 голосов
/ 27 мая 2011

Я использую следующие методы для шифрования ключа данных:

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

Так что я думаю, что это \ сломать его.

1 Ответ

2 голосов
/ 27 мая 2011

Я думаю, что 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...