PHP разные односторонние хеши для безопасности паролей - PullRequest
2 голосов
/ 02 сентября 2010

Мне было интересно хэшировать пароль в PHP, используя различные доступные методы и их сочетание для большей безопасности. Мне было интересно, будет ли это работать ..?

$pass = "***";
$salt = "!@)#%%@(#&@_!R151";
$pass = sha1($pass.$salt);
$pass = md5($pass);

Ответы [ 5 ]

5 голосов
/ 02 сентября 2010

Вместо этого вы можете использовать более сильный алгоритм хеширования , например sha512 с комбинацией сильной соли и UserID: сделать это так:

 echo hash('sha512', 'MyPassword' . $StrongSalt . $UserID);

SHA512 на самом деле является SHA-2, для которого не найдено никаких столкновений.См. Википедия .

5 голосов
/ 02 сентября 2010

Неа.Комбинации не повышают безопасность.
На самом деле вы сделали его менее безопасным.Теоретически, но все равно.

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

0 голосов
/ 02 сентября 2010

ЕСЛИ вы собираетесь это сделать, а не просто MD5 результат:

$pass = "***";
$salt = "!@)#%%@(#&@_!R151";
$pass = sha1($pass.$salt);
$pass = md5($pass);

Вместо этого запустите md5 для результата и входных данных ...

$pass = "***";
$salt = "!@)#%%@(#&@_!R151";
$tmp = sha1($pass.$salt);
$pass = md5($tmp . $pass . $salt);

Причина в том, что если вы делаете md5(sha1()), вы в основном увеличиваете вероятность столкновения.Причина в том, что все sha1 коллизии будут автоматически коллизиями в вызове md5 (следовательно, это супернабор коллизий).Повторно введя пароль и соль, вы предотвращаете это и, следовательно, создаете более сильный хэш, а не более слабый ...

0 голосов
/ 02 сентября 2010

Скорее всего, ваши пароли никогда не будут защищены на 100%.

Попробуйте взглянуть на одноразовый номер . , который должен генерироваться для каждого отдельного пользователя.

0 голосов
/ 02 сентября 2010

Я думаю, что добавления соли достаточно, но если вы хотите больше, возможно, сделайте:

sha1($salt. sha1($salt. $pass));

и пусть $salt содержит некоторые непечатные символы, произвольные двоичные данные или что-то подобное.

Опять же, я полагаю, это не сильно прибавит, так как реализация, которую я видел, только добавляет $ salt, но почему бы не повысить безопасность для будущих эпох:)

...