Как я могу воспроизвести хэш SHA512 в C #, который соответствует PHP SHA512?
Вопрос
Вопрос довольно понятен. Я погуглил много сайтов, много методов, перепробовал много кодировок, но я не могу заставить его соответствовать.
Я пытаюсь создать строку " 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 р>