2013-02-22 3 views
5

Я сделал регистрационную форму, в которой пользователь отправил свое имя пользователя и пароль. Если существует имя пользователя, я дешифрую пароль и проверяю, совпадает ли он с предоставленным паролем.Codeigniter не может декодировать зашифрованный пароль

// Это из БД

string(50) "v+bNPHNWHGQbcxrvu1vN8Ty++cMq0oEeaZesvfCfsLgNAFgZno" 

// И это после того, как расшифровывает строку выше

string(32) "�� U�U{q�0�4��è€UC��o�/�*�." 

Но он должен вернуть

Для кодирования я использую

$this->encrypt->encode('123456'); 

И это секретный ключ

$config['encryption_key'] = 'kRlaMneym7rF'; 

// Редактировать

Проблема, что поле пароль был установлен на VARCHAR 50

+3

Вы не должны шифровать свои пароли, кроме как их использовать.Затем, когда пользователь пытается войти в систему, вы присваиваете значение hash и проверяете его с помощью хэша в базе данных. Это немного больше (соли и т. Д.), Но это в основном это. – jeroen

+0

Как вы расшифруете данные? – Repox

+0

$ this-> encrypt-> decode ('v + bNPHNWHGQbcxrvu1vN8Ty ++ cMq0oEeaZesvfCfsLgNAFgZno'); – Ben

ответ

4

Пожалуйста, проверьте CodeIgniter кодовую в конфигурации

$config['charset'] = 'UTF-8'; 

по сравнению с кодировкой вашей базы данных. Вероятно, ваш конфликт исходит оттуда.

Введите Codeigniter, чтобы проверить и вернуть ли он правильный результат. Попробуйте выполнить жесткое кодирование, как раньше, или скопируйте и проверите это в своем контроллере.

function testencrypting(){ 
    $str = '12345'; 
    $key = 'my-secret-key'; 
    $encrypted = $this->encrypt->encode($str, $key); 
    echo $this->encrypt->decode($encrypted, $key); 
    exit; 

}

Mine производят ожидаемый результат: 12345. Если это работает, то проблема, возможно, CHARACTER SET (CHARSET). Здесь я использую ключ шифрования. Вы можете использовать конфигурацию по умолчанию, оставив второй параметр в кодировке и декодировании.

Позвольте мне знать, если это помогло

3

Вы хотите хэширования, а не шифровать, и вы можете сделать это с библиотекой шифрования CodeIgniter, которая использует SHA1 для хэширования.

$password = $this->encrypt->sha1('123456'); 

Это вернет 7c4a8d09ca3762af61e59520943dc26494f8941b, что и будет храниться в базе данных.

Вы не можете un hash пароль - вы хотите проверить хешированный ввод на хэш в базе данных.

0

ив понял это. Я обнаружил, что это потому, что таблица, которую я использовал для хранения пароля unicode, была latin1. я изменил пароль поля таблицы пользователей как utf-8, который, казалось, вылечил эту проблему.

2

Возможной причиной может быть длина этого поля в вашей базе данных, это был мой случай. У меня было слишком короткое поле.

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