哈希函数 .NET

3

我需要编写一个应用程序,接受字符串输入并计算字符串的哈希值(输入字符串的最大字符数为16),输出应以base64格式为22个字符长度(或更短但不更长)。

我发现.NET框架提供了许多哈希函数,但我不知道该使用哪个,有人能推荐一下最好的函数以及如何限制输出为22个字符吗?

谢谢!


2
你是要将哈希函数用于加密目的还是哈希表中? - Ani
@Ani:22字节的base64输出表明这是一个加密哈希函数,而不是哈希表(通常使用机器字大小的哈希)。 - Conrad Meyer
2
MD5和SHA-1已经不再安全。请使用SHA-2或SHA-3。 - user1849818
3个回答

7
您可以使用MD5,它会提供一个128位的输出,然后在转换为base64时丢弃最后两个字符,因为它们总是“==”(填充)。这应该给您22个字符。
string GetEncodedHash(string password, string salt)
{
   MD5 md5 = new MD5CryptoServiceProvider();
   byte [] digest = md5.ComputeHash(Encoding.UTF8.GetBytes(password + salt);
   string base64digest = Convert.ToBase64String(digest, 0, digest.Length);
   return base64digest.Substring(0, base64digest.Length-2);
}

3
您可以使用任何哈希函数,并将哈希简单地截断为所需大小,然后转换为base-64编码。在您的情况下,您需要将哈希截断为15字节,这最终会变成20个base-64字节。我将重用之前的示例。
string secretKey = "MySecretKey";
string salt = "123";
System.Security.Cryptography.SHA1 sha = System.Security.Cryptography.SHA1.Create();
byte[] preHash = System.Text.Encoding.UTF32.GetBytes(secretKey + salt);
byte[] hash = sha.ComputeHash(preHash);
string password = prefix + System.Convert.ToBase64String(hash, 0, 15);

1

22个base64字符意味着从您的哈希函数输出16字节;您可以使用任何输出128位的哈希函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接