Документы (http://php.net/manual/de/function.crypt.php) для функции crypt () покажите следующий пример для хеша MD5:
$1$rasmusle$rISCgZzpwk3UhDidwXvin0
Я понимаю, что «$ 1 $» — это префикс, который содержит информацию о том, что хеш — это хеш MD5.
Но как остальная часть строки является хешем MD5? Обычно это должна быть строка из 32 символов (0-9, a-f), верно?
Я уверен, что это глупый вопрос, но я все еще хочу спросить.
Обычно это должна быть строка из 32 символов (0-9, a-f), верно?
То есть неправильно (по крайней мере, строго говоря). Технически, хэш MD5 является 128-битное числовое значение. Форма, к которой вы привыкли, просто шестнадцатеричное представление из этого числа. Это часто выбирают, потому что они легко обменять as strings (128-разрядные целые числа трудно обрабатывать. В конце концов, типичная целочисленная переменная обычно содержит только 64-разрядные значения). Рассмотрим следующие примеры:
md5("test")
в шестнадцатеричный (база 16) представление: 098f6bcd4621d373cade4e832627b4f6
md5("test")
в база 64 представление: CY9rzUYh03PK3k6DJie09g==
md5("test")
в десятичный (база 10) представление: 12707736894140473154801792860916528374
md5("test")
в база 27 представление (никогда не использовал, только потому, что я могу и доказать свою точку зрения): ko21h9o9h8bc1hgmao4e69bn6f
Все эти строки представляют одно и то же числовое значение, только в разных базах.
Других решений пока нет …