У меня большая проблема, я должен написать страницу входа в 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 »».
Некоторые идеи? Кто-то знает, где я не прав?
jgh/SZtmRWH5iDIwtXyFLtuuDf7YE+7HQEJZ4KFFNAg=
это Base64 (= на конце является мертвой раздачей, хотя Base64 существует без завершающего =
).8E087F499B664561F9883230B57C852EDBAE0DFED813EEC7404259E0A1453408
base64_decode
является.Таким образом, вам необходимо последовательно обрабатывать данные в кодировке base64. И тогда вам нужно убедиться, что ваш хэш-алгоритм, количество итераций и количество выходных байтов совпадают с тем, что говорит Perl-скрипт.
попробуй это
$hash = strtoupper(bin2hex($hash));