Я не уверен, как это работало в Drupal 6, но Drupal 7 реализует соль, используемую при сравнении с паролем db, в сравниваемой строке. При просмотре _password_crypt () в password.inc, $ salt определяется как
$salt = substr($setting,4,8);
Где переменная $ setting - это первые 12 символов пароля базы данных.
Соль, если затем добавляется к паролю $.
$hash = hash($algo, $salt . $password);
Важно принять во внимание, что это хеширование выполняется многократно, в частности, для повышения безопасности. Чтобы узнать, сколько раз он хэшируется, используется второй символ пароля базы данных (на самом деле он находится между знаками $), чтобы узнать количество выполненных повторений. Этот символ сравнивается со строкой с именем itoa64 , поэтому позиция этого символа равна числу повторений в log2.
$itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
То, что я подразумеваю под log2 количество повторений , состоит в том, что фактическое число будет равно 2 степени этого числа. Таким образом, учитывая, что первое число находится в диапазоне от 7 до 30, количество повторений составляет от 128 до 1 073 741 824.
Наконец, зашифрованный пароль кодируется в base64, проверяется (сравнивается его длина до и после кодирования) и возвращается для сравнения с помощью user_check_password или используется user_hash_password для хранения со случайным хешем, сгенерированным с _password_generate_salt()
.