2015-05-12 4 views
3

Документов (http://php.net/manual/de/function.crypt.php) для склепе функции() показывает следующий пример для хэша MD5:PHP склеп() - Возвращается md5 хэш

$1$rasmusle$rISCgZzpwk3UhDidwXvin0 

Я понимаю, что "$ 1 $" являются префиксом, который содержит информацию о том, что хэш является хешем MD5.

Но как остальная часть строки MD5-хэш? Обычно это должна быть строка с 32 символами (0-9, a-f), правильно?

Я уверен, это глупый вопрос, но я все еще хочу спросить.

+2

Что вы ожидаете, это строка в шестнадцатеричном кодировании, то, что вы получили, является строкой, кодированной base64. Оба они представляют двоичный вывод функции хеширования. Также: '$ ID $ SALT $ HASH' То, что вы должны * использовать *, - [' password_hash() '] (http://php.net/manual/en/function.password-hash.php) и, безусловно, не MD5. – Sammitch

+1

@Sammitch Пока 'password_hash()' определенно лучше, чем 'crypt()', он недоступен до PHP 5.5. Например, я все еще обновляю несколько сайтов с помощью PHP 5.3 или 5.4, и я определенно хотел бы использовать 'password_hash()' там. – Pietu1998

+3

@ Pietu1998 - существует [пользовательская реализация password_ *] (https://github.com/ircmaxell/password_compat) для версий PHP от 5.3.7 вверх –

ответ

3

Обычно это должна быть строка с 32 символами (0-9, a-f), правильно?

То есть Неправильно (по крайней мере, строго говоря). Технически, хеш MD5 представляет собой 128-разрядное числовое значение. Форма, к которой вы привыкли, - это просто шестнадцатеричное представление этого номера. Он часто выбирается потому, что они легко обмениваются как строки (128-битные целые числа трудно обрабатывать. В конце концов, типичная целочисленная переменная обычно содержит только 64 бит). Рассмотрим следующие примеры:

  1. md5("test") в шестнадцатеричное (основание 16) представление: 098f6bcd4621d373cade4e832627b4f6
  2. md5("test") в основание 64 представление: CY9rzUYh03PK3k6DJie09g==
  3. md5("test") в десятичной (основание 10) представления: 12707736894140473154801792860916528374
  4. md5("test") в основа 27 представление (никогда не используется, только потому, что я могу и доказать свою точку): ko21h9o9h8bc1hgmao4e69bn6f

Все эти строки представляют собой то же числовое значение, только в разных базах.

+0

плюс один для изложения того, что «md5» не ограничивается шестнадцатеричным представлением. – dognose

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