Это должно быть так просто, но я потратил 4 часа на то, чтобы поиграть с этим кодом, и я просто не могу заставить его работать.
PHP-код работает следующим образом (я его не написал и не могу его изменить, поэтому я застрял с ним):
$password = hash('sha512', "HelloWorld1");
$salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true);
$hashed = hash('sha512', $password.$salt);
$ hashed и $ salt хранятся в БД как есть. Это означает, что $ salt уже хешируется для дальнейшего использования.
Понятия не имею, почему они решили хешировать все , но что сделано, то сделано.
В этом случае результат
Pswd: ab3e648d69a71b33d0420fc3bfc9e2e8e3ef2a300385ea26bc22057a84cd9a5c359bd15c4a0a552122309e58938ce310839cd9d2ecad5f294266015d823331dd
Salt: fb5a0f741db0be2439dc14662aae3fc68eb5e16b446385d3ddd319b862d5e2d4f50488a39487b27fdd8ff7b7b76420fc3ebef2bce9e082ac15c9f2d6fe7d87fc
Теперь код входа на стороне C # должен совпадать с хешированным паролем в виде простого текста и уже хешированной солью.
string password = "HelloWorld1";
string storedSalt = "fb5a0f741db0be2439dc14662aae3fc68eb5e16b446385d3ddd319b862d5e2d4f50488a39487b27fdd8ff7b7b76420fc3ebef2bce9e082ac15c9f2d6fe7d87fc";
using(SHA512 shaManaged = new SHA512Managed())
{
byte[] hashPassword = shaManaged.ComputeHash(Encoding.UTF8.GetBytes(password));
string hashPasswordString = BitConverter.ToString(hashPassword).Replace("-", "");
byte[] finalHash = shaManaged.ComputeHash(Encoding.UTF8.GetBytes(hashPasswordString + storedSalt));
Debug.WriteLine("Calculated Hash Password: " + BitConverter.ToString(finalHash).Replace("-", ""));
}
По сути, идея состоит в том, чтобы
- Сначала хешируйте простой текстовый пароль (так же, как и с кодом PHP).
- Преобразование байтового массива в строку, соответствующую PHP-формату хэширования.
- Затем хешируйте хешированный пароль и ранее хешированную соль.
Результат выглядит следующим образом:
Stored Hash Password: AB3E648D69A71B33D0420FC3BFC9E2E8E3EF2A300385EA26BC22057A84CD9A5C359BD15C4A0A552122309E58938CE310839CD9D2ECAD5F294266015D823331DD
Calculated Hash Password: 189ABBA71AAEDDE5C8154558B68D59500A72E64D5F3F3C07EFA94F0126571FBB68C6ADD105E0C029BABF30CADD8A6A6B6E4749075854461A88EE1CE545E84507
Надеюсь, кто-то может определить, где я ошибаюсь:)