Трудно сравнить хеш

Я перемещаю пользователей из одной среды в другую, и нам необходимо проверить пароли пользователей в этой новой среде. Я пытаюсь удержать пользователей от необходимости сбрасывать свои пароли.

Мой план состоит в том, чтобы получить введенный пароль при входе в систему, запустить его через тот же процесс и посмотреть, получу ли я в результате существующий хеш. Затем я повторно хеширую пароль к другому стандарту.

Проблема в том, что текущий хеш выполняется с использованием pbkdf2 с алгоритмом HMAC-SHA1, 3000 запусков.

Если я размещу информацию, которую я получаю с текущего сайта Вот Я получил правильный хэш.
Если я делаю то же самое, используя hash_pbkdf2 в PHP я получаю разные результаты.

$hash = hash_pbkdf2('sha1', 'testing123', $salt, 3000, 16); // Found: cb2f9681a3bcad97
$base64 = base64_encode( $hash ); // Found: Y2IyZjk2ODFhM2JjYWQ5Nw==

Для соли я попробовал это в двоичном, шестнадцатеричном, прописном, строчном, base64, декодированном, закодированном. Я, наверное, попробовал все варианты.

Значения для тестирования:

Password: testing123
Runs: 3000
Length: 16
Salt: lg4YdsfGNm9zuRizCmk9rA==
Expected result in base64: b11fsnE0JKRaVJTS7uHDqQ==

Я не понимаю, что я делаю не так.

1

Решение

Не уверен, почему, но веб-сайт, который вы предоставили, и hash_pbkdf2() не ведут себя одинаково:

  1. выглядит как PHP hash_pbkdf2() делит на 2 длину ключа, поэтому вы должны удвоить его, чтобы получить тот же хеш
  2. РНР hash_pbkdf2()результат соответствует Hex поле на сайте

Следующий код даст вам то же значение base64, что и на сайте (согласно приведенным выше комментариям):

$hash = hash_pbkdf2('sha1',
/* password */ 'testing123',
/* salt */ "lg4YdsfGNm9zuRizCmk9rA==",
/* iterations */ 3000,
/* key length *2 */ 32);
$bin = hex2bin($hash);
$base64 = base64_encode($bin);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]