2013-12-02 3 views
0

Я пытаюсь использовать mcrypt_create_iv для генерации случайных солей. Когда я проверяю, генерируется ли соль, эхо-сигнал проверяется, но это не обязательная длина, которую я передаю в качестве параметра к ней (32), вместо этого ее меньше.PHP mcrypt_create_iv возвращает вопросительные знаки и неправильную длину - CodeIgniter

Когда я храню это в моей таблице базы данных однако, он показывает, как что-то вроде этого K??5P?M???4?o???"?0??

Я уверен, что это что-то делать с базой данных, но я попытался изменить сверку его в соответствии с настройки конфигурации CI, который является utf8_general_ci, но он не решает проблему, вместо этого он генерирует гораздо меньшую соль.

Кто-нибудь знает, что может быть неправильным? Спасибо за любую обратную связь/помощь

+0

Я только что изменил настройку char_set в конфигурации CodeIgniters db на latin1; он, похоже, создал хорошую соль, но я попробую войти и отчитаться. – a7omiton

+0

PS: будут ли какие-либо побочные эффекты для моих других таблиц, когда я буду запрашивать базу данных, когда я установил char_set как latin1? – a7omiton

+0

Настройка кодировки для latin1, похоже, перепутала вставку дат в базу данных. Любая идея почему? – a7omiton

ответ

1

Функция mcrypt_create_iv() вернет двоичную строку, содержащую \ 0 и другие нечитаемые символы. В зависимости от того, как вы хотите использовать соли, сначала вам нужно кодировать эти байтовые строки, принятый алфавит. Также возможно хранить двоичные строки в базе данных, но, конечно, у вас будет проблема их отображения.

Поскольку соли обычно используются для хранения паролей, я бы рекомендовал взглянуть на функцию PHP password_hash(), она автоматически генерирует соль и включает ее в полученное значение хеша, поэтому вам не нужна отдельная база данных поле для соли.

+0

Да, я знаю функцию password_hash, но она доступна только в PHP5.5. Я использую WAMP, так что пока не поддерживается для меня, чтобы обновить – a7omiton

+0

Что вы думаете об изменении типа данных столбца в моей таблице базы данных на двоичный/varbinary, а не на varchar? Будет ли это влиять на кодирование и декодирование? Я использую функцию hash() для шифрования/дешифрования паролей пользователей вместе со своей солью. – a7omiton

+0

@ a7omiton. Существует также [пакет совместимости] (https://github.com/ircmaxell/password_compat/blob/master/lib/ password.php) для функции password_hash(). Если это не вариант, вы можете посмотреть мой [пример кода] (http://www.martinstoeckli.ch/php/php.html#bcrypt), который генерирует соль BCrypt. Это зависит от того, что вы хотите делать с солью, если вам это нужно для BCrypt, тогда вы не должны хранить его отдельно в базе данных, просто посмотрите на пример. – martinstoeckli

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