如何在适合PHP SHA512的C#中重现SHA512哈希?

时间:2009-09-13 23:04:33

标签: c# .net php hash sha512

这个问题几乎是不言自明的。我用Google搜索了许多网站,很多方法,尝试了很多编码,但我无法让它匹配。

我正在尝试将字符串“asdasd”匹配。 (http://www.fileformat.info/tool/hash.htm?text=asdasd

3 个答案:

答案 0 :(得分:16)

试试这个

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 :(得分:1)

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位哈希,抱歉:)

答案 2 :(得分:0)

我花了几个小时试图获得一个.NET哈希函数来匹配PHP的Crypt函数。不好玩。

这里存在多个挑战,因为Crypt的PHP实现返回base64编码的字符串,并且不进行多次散列迭代(例如,Crypt默认为5000。)我无法从.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