2012-05-09 1 views
2

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

$value = 'somevalue'; 
$key = Configure::read('Security.salt'); 

$encrypted = Security::cipher($value,$key); 
$decrypted = Security::cipher($encrypted,$key); 

Он отлично работает, он шифрует/расшифровывает правильно. Но я не могу сохранить зашифрованное значение в базе данных - я установил значение поля encrypted_data в $encrypted, а после save() ничего в этом поле в базе данных нет. Когда я меняю $ зашифрованный на, например, на «string», он сохраняет строку «правильно» до 'encrypted_data'.

Таким образом, проблема может заключаться в том, что зашифрованная строка содержит некоторые странные символы, которые база данных не принимает - как я могу ее исправить? (Использование базы данных mysql с utf-8)

+2

Каков тип и длина поля 'encrypted_data' в db –

+0

Не могли бы вы показать нам 'var_dump ($ encrypted);'? – kapa

+0

var_dump = string 'đĚŇ \' (length = 6), тип поля - varchar (50) – user606521

ответ

1

Проблема в том, что ваш VARCHAR не поддерживает эти символы. Вместо этого вы должны поменять столбец на VARBINARY для поддержки символов за пределами кодировки UTF.

2

Возможно, вы использовали base64_encode($encrypted) после шифрования и перед тем, как хранить в базе данных, и base64_decode($encrypted) перед расшифровкой.

 Смежные вопросы

  • Нет связанных вопросов^_^