Php возвращает pbkdf2, отличный от C# - PullRequest
0 голосов
/ 09 февраля 2020

Мне нужно проверить пароли от PHP, а также C#. Я не могу понять, что мне не хватает при расчете pbkdf2, но я получаю разные результаты:

C#

    public const int HASH_SIZE = 32; // size in bytes
    public const int ITERATIONS = 1000; // number of pbkdf2 iterations

    static void Main(string[] args)
    {
        string pwd = "123";
        string saltString = "12345678";
        Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(pwd, Encoding.ASCII.GetBytes(saltString), ITERATIONS, HashAlgorithmName.SHA256);
        byte[] a = pbkdf2.GetBytes(HASH_SIZE);
        Console.WriteLine(Convert.ToBase64String(a));
        for (int i = 0; i < a.Length; ++i)
        {
            Console.Write("{0} ", a[i]);
        }
        Console.WriteLine();
    }

PHP

$new_password = "123";
$salt = "12345678";
$iterations = 1000;

$hashed = hash_pbkdf2("sha256", $new_password, $salt, $iterations, 32);
var_dump(implode(' ',unpack('C*', $hashed)));

$saltBin = implode(unpack('c*', $salt));
$hashed = hash_pbkdf2("sha256", $new_password, $saltBin, $iterations, 32);
var_dump(implode(' ',unpack('C*', $hashed)));

Результаты C#

L/NRbpfKQeZrNZwdIyHE8+AXBOZ8DRNMFnU3eBYA7Eg=
47 243 81 110 151 202 65 230 107 53 156 29 35 33 196 243 224 23 4 230 124 13 19 76 22 117 55 120 22 0 236 72

PHP

D:\Temp\test.php:7:
string(101) "50 102 102 51 53 49 54 101 57 55 99 97 52 49 101 54 54 98 51 53 57 99 49 100 50 51 50 49 99 52 102 51"
D:\Temp\test.php:11:
string(104) "55 51 99 50 101 100 99 57 101 51 101 56 101 56 51 56 50 99 48 49 102 54 56 52 57 102 48 99 102 100 56 48"
...