Как я могу воспроизвести хэш SHA512 в C #, который соответствует PHP SHA512?

StackOverflow https://stackoverflow.com/questions/1419069

  •  07-07-2019
  •  | 
  •  

Вопрос

Вопрос довольно понятен. Я погуглил много сайтов, много методов, перепробовал много кодировок, но я не могу заставить его соответствовать.

Я пытаюсь создать строку " asdasd " матч. ( http://www.fileformat.info/tool/hash.htm?text= Asdasd )

Это было полезно?

Решение

Попробуйте это

using System.Security.Cryptography

public static string HashPassword(string unhashedPassword)
{
    return BitConverter.ToString(new SHA512CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(unhashedPassword))).Replace("-", String.Empty).ToUpper();
}

Другие советы

BitConverter работает просто отлично ...

var testVal = "asdasd";
var enc = new ASCIIEncoding();
var bytes = enc.GetBytes( testVal );

var sha = new SHA512Managed();
var result = sha.ComputeHash( bytes );

var resStr = BitConverter.ToString( result );
var nodash = resStr.Replace( "-", "" );

nodash.Dump();

(исправлено для 512-битного хэша, извините:)

Я потратил несколько часов, пытаясь получить хеш-функцию .NET, соответствующую PHP-функции Crypt. Не смешно.

Здесь есть несколько проблем, так как реализация Crypt на PHP возвращает строку в кодировке base64 и не выполняет несколько итераций хэширования (например, 5000 для Crypt.) Я не смог получить аналогичные выходные данные из .NET, используя несколько библиотек, пока я не нашел CryptSharp. Он принимает соль, аналогичную функции PHP (или исходной C) (например, " $ 6 $ round = 5000 $ mysalt " ). Обратите внимание, что конечного $ нет, и что если вы не предоставите соль, она автоматически сгенерирует случайную.

Вы можете найти CryptSharp здесь: http://www.zer7.com/software.php?page=cryptsharp

Хорошее фоновое чтение: - http://www.akkadia.org/drepper/SHA-crypt.txt

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top