Пакетное создание пользователей Seafile (облачное хранилище) с php: хэш пароля не совпадает

Я пытаюсь создать пользователей Seafile с помощью php. http://www.seafile.com

Хэш уже существующего пользователя выглядит так:

PBKDF2SHA256$10000$9ee87caa42ed5b5fd3f62781d8df82af5e2d9e5e5250d22bf70336cc5e2fb060$478602208097c48b47042e25d026fec1b0363551a4f52aa2e2674f3093010215

Итак, я предполагаю, что алгоритм хэширования — sha256 с использованием функции вывода ключа pbkdf2 с 10 000 раундов. Первая часть после этого должна быть солью, разделенной $, затем должен быть хэш pwd.

Seafile имеет открытый исходный код, поэтому я попытался найти код для генерации этого хэша и нашел этот:

Существует функция hash_password_pbkdf2_sha256(), которая должна выполнять эту работу.

Когда я пытаюсь создать тот же хеш, что и выше, с помощью php (пароль «12345678»)

hash_pbkdf2('sha256', '12345678','9ee87caa42ed5b5fd3f62781d8df82af5e2d9e5e5250d22bf70336cc5e2fb060', 10000, 64)

Я получаю 148f4d331b647bafa2b15d145814d56fbe40e13221aff6e53329680b4cadbc84, который не равен выше 478602208097c48b47042e25d026fec1b0363551a4f52aa2e2674f3093010215

Любые идеи, как это исправить?


person tobawo    schedule 29.04.2014    source источник


Ответы (1)


Функция C validate_passwd_pbkdf2_sha256 в файле, который вы указали, вызывает hex_to_rawdata (salt_str, salt, SHA256_DIGEST_LENGTH) перед хешированием пароля. Эквивалентом PHP будет hex2bin.

hash_pbkdf2(
  'sha256',
  '12345678',
  hex2bin('9ee87caa42ed5b5fd3f62781d8df82af5e2d9e5e5250d22bf70336cc5e2fb060'),
  10000,
  64
);

производит ожидаемое 478602208097c48b47042e25d026fec1b0363551a4f52aa2e2674f3093010215

person exore    schedule 15.05.2014