crypt () не работает должным образом - PullRequest
3 голосов
/ 30 июля 2011

Я использую крипту следующим образом:

$pass = crypt($pass, 'd4');

для вставки и проверки пароля к таблице mysql. Проблема в том, что, если пароли похожи, это приводит к аналогичному результату. Существует ли алгоритм, который гарантирует разные результаты для разных паролей?

Ответы [ 4 ]

4 голосов
/ 30 июля 2011

Используйте hash() и выберите алгоритм хеширования, который подходит вам (если возможно, что-то более сильное, чем MD5, но также не подходите к SHA512)

Вкл * 1006Страница справки *crypt() содержит следующую информацию:

Стандартный crypt () на основе DES возвращает соль в качестве первых двух символов вывода.Он также использует только первые восемь символов строки str, поэтому более длинные строки, начинающиеся с одинаковых восьми символов, будут генерировать одинаковый результат (при использовании одной и той же соли).

, что должно объяснить, почему вы получаетете же результаты.

2 голосов
/ 30 июля 2011

Использование crypt() - это нормально, если вы не используете старый режим на основе DES (CRYPT_STD_DES).Единственная действительная причина для этого - совместимость с устаревшим программным обеспечением, использующим такие хеши паролей.

Вместо этого используйте режимы CRYPT_BLOWFISH, CRYPT_SHA256 или CRYPT_SHA512.Это современные алгоритмы хеширования паролей, которые принимают произвольно длинные парольные фразы, используют длинные соли и поддерживают усиление ключей с помощью нескольких итераций.

К сожалению, интерфейс PHP crypt() несколько неудобен: единственный способ явно выбрать алгоритм, который выwant - это предоставление правильно отформатированного параметра $salt, что означает, что вы также должны генерировать саму соль.Это, вероятно, все еще проще и безопаснее, чем использование собственного хэшированного пароля.

1 голос
/ 30 июля 2011

со страницы php crypt ():

Стандартный crypt () на основе DES возвращает соль в качестве первых двух символов вывода.Он также использует только первые восемь символов строки str, поэтому более длинные строки, начинающиеся с одинаковых восьми символов, будут генерировать одинаковый результат (при использовании одной и той же соли).

Вы также можете использовать другой метод шифрования, такой как MD5 или SHA256, поскольку они часто предпочтительнее, чем DES.

1 голос
/ 30 июля 2011

Вы можете добавить соль. Обычно, если вы храните пароли, вам нужно их хешировать, а не шифровать. Есть множество вещей, которые вы можете узнать об этом, если будете искать (например, в Google).

...