Как я могу воспроизвести хэш SHA512 в C #, который соответствует PHP SHA512? - PullRequest
7 голосов
/ 14 сентября 2009

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

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

Ответы [ 3 ]

16 голосов
/ 14 сентября 2009

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

using System.Security.Cryptography

public static string HashPassword(string unhashedPassword)
{
    return BitConverter.ToString(new SHA512CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(unhashedPassword))).Replace("-", String.Empty).ToUpper();
}
1 голос
/ 14 сентября 2009

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-битного хэша, извините:)

0 голосов
/ 01 февраля 2014

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

Здесь есть несколько проблем, так как реализация PHP Crypt возвращает строку в кодировке 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

...