Проверьте пароль, сохраненный с PBKDF2 с переполнением стека

У меня большая проблема, я должен написать страницу входа в php, используя базу данных, где пароль хранится как PBKDF2 (с другим сценарием perl). Когда я получаю пароль с запросом, я читаю это:
sha256: 1000: 2SeBDP88w4bqKbJaCJNpNuRHQhUM96X1: jgh / SZtmRWH5iDIwtXyFLtuuDf7YE + 7HQEJZ4KFFNAg = (я знаю этот пароль, но не могу восстановить его в php).

Я пытался с этим скриптом (получить с php.net):

$password = "qqqqq";
$iterations = 1000;
$salt = "2SeBDP88w4bqKbJaCJNpNuRHQhUM96X1";
$hash = hash_pbkdf2("sha256", $password, $salt, $iterations, 20);
echo $hash   // result a2ba3349194c38f828af

но генерация прохода — a2ba3349194c38f828af, а не jgh / SZtmRWH5iDIwtXyFLtuuDf7YE + 7HQEJZ4KFFNAg =

который написал Perl-скрипт, в котором хранятся эти пароли, сказал мне: «Пароли кодируются через одностороннюю схему хэширования с именем« PBKDF2 »».

Некоторые идеи? Кто-то знает, где я не прав?

0

Решение

  • jgh/SZtmRWH5iDIwtXyFLtuuDf7YE+7HQEJZ4KFFNAg= это Base64 (= на конце является мертвой раздачей, хотя Base64 существует без завершающего =).
  • Пересчитано в шестнадцатеричное значение 8E087F499B664561F9883230B57C852EDBAE0DFED813EEC7404259E0A1453408
  • Это еще не ваш ответ, но теперь мы можем легко увидеть, что это 64 шестнадцатеричных символа => 32 байта.
  • Вы просили 20 байтов.
  • Похоже, что ваш ввод соли — base64, но функция, которую вы передаете, ожидает … независимо от вывода base64_decode является.

Таким образом, вам необходимо последовательно обрабатывать данные в кодировке base64. И тогда вам нужно убедиться, что ваш хэш-алгоритм, количество итераций и количество выходных байтов совпадают с тем, что говорит Perl-скрипт.

0

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

попробуй это

$hash = strtoupper(bin2hex($hash));
0

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