这个问题几乎不言自明。我搜索了很多网站,很多方法,尝试了很多编码,但我无法使它匹配。如何在C#中重现适合PHP SHA512的SHA512哈希?
我想使字符串“asdasd”匹配。 (http://www.fileformat.info/tool/hash.htm?text=asdasd)
这个问题几乎不言自明。我搜索了很多网站,很多方法,尝试了很多编码,但我无法使它匹配。如何在C#中重现适合PHP SHA512的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位散列,抱歉:)
我不知道这只是你的代码中的一个错字,但他要求的是sha512,而不是sha256。 – 2009-09-13 23:36:00
我只花了几个小时试图获得.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
PHP不具有SHA-512执行,据我所知。你可以发布你使用的代码吗? – 2009-09-13 23:11:06
我错了。 PHP似乎支持相当多的哈希函数:http://www.php.net/hash – 2009-09-13 23:15:51
但我仍然希望看到您用于回答此问题的代码。 (对不起,垃圾评论:-D) – 2009-09-13 23:17:50