2013-12-13 3 views
0

Я заметил, что многие PHP-программы, такие как Joomla! или Wordpress preend "$ xx $." символов к их хешированным строкам. Это происходит, например, при хранении паролей пользователей в базах данных.
В чем причина этого?

+1

Он обозначает используемый алгоритм хэширования. – towr

+1

Определяет конкретный алгоритм хеширования. –

ответ

2

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

Если вы используете crypt, вы просто используете crypt($password, $hash) == $hash и crypt цифры из хэша, которые вы предоставляете, какой алгоритм использовать. Он также может извлекать соль и другие варианты (в зависимости от алгоритма).

Например, для sha256 вы получаете что-то вроде «$5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6» (от http://php.net/manual/en/function.crypt.php). «5» обозначает алгоритм хэширования, «rounds=5000» - это вариант, который использует алгоритм хеширования, а «usesomesillystringforsalt» - это соль, которая гарантирует, что хэши одного и того же пароля выглядят по-разному для разных людей и затрудняют грубые отношения, атаковать хэш. «KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6» является фактическим хешированным паролем.

+1

НЕТ, если он действительно читает '' usesomesillystringforsalt'', то разработчик ошибся, соль должна быть сгенерирована генератором случайных чисел, в противном случае могут применяться атаки. –

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