2010-09-02 2 views
2

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

$pass = "***"; 
$salt = "[email protected])#%%@(#&@_!R151"; 
$pass = sha1($pass.$salt); 
$pass = md5($pass); 
+0

Я не думаю, что 'md5()' -ing ' sha1() 'hash - хорошая идея ... – BoltClock

+0

Да, это сработает. Но убедитесь, что соль уникальна для каждого пароля. – Gumbo

ответ

5

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

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

SHA512 фактически SHA-2, для которых нет никаких столкновений найдено. См. По адресу wikipedia.

+1

Уммм, разве это не победит? Поскольку 'microtime()' не воспроизводится, вы просто создали хэш, который вы не можете проверить (если вы его где-то не храните) ... – ircmaxell

+0

@ircmaxell, О, да, я просто забыл эту часть. Спасибо за напоминание. Исправлено: – shamittomar

+1

+1 затем ... (Поскольку использование более сильного алгоритма - хороший совет в целом) ... – ircmaxell

5

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

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

+0

Вы можете добавить безопасность своего пароля, используя другие способы, как разделение хэшированного пароля и сохранение его в другом месте. (видел эту технику в gallery2) – sheeks06

+0

@sheeks единственный вопрос - вам это действительно нужно? –

+0

№: просто поделитесь. может быть ему полезна. – sheeks06

0

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

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

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

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

0

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

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

+0

Вы имеете в виду, что каждая соль должна быть nonce? –

0

IF вы собираетесь это сделать, не только MD5 результат:

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

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

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

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

+0

Если я правильно понимаю это, когда я перейду на этот пропуск, первое столкновение MD5 позволит мне, независимо от его аргументов. Где я ошибаюсь? –

+0

@Col: Да, первое столкновение 'md5' позволит вам войти. Это всегда так. Но если вы просто делаете 'md5 (sha1 (stuff)), вы можете встретить столкновение' md5' ** или ** sha1'. Либо вы в порядке. Если вы делаете 'md5 (sha1 (stuff). Stuff)', вы устраняете эту проблему. Что касается того, почему хэш многократно, вы можете прочитать [подробнее об этом в этом вопросе/ответе] (http://stackoverflow.com/questions/3559437/many-hash-iterations-append-salt-every-time/3559497# 3559497) ... О, и я не пытаюсь предложить использовать этот метод ('md5 (sha1())'), только ** IF ** он используется ... – ircmaxell

+1

Это странное поведение снова. Зачем вообще отвечать, если вы сами не предлагаете свой ответ? Я не могу этого вынести. –

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