C# 哈希函数.NET

C# 哈希函数.NET,c#,hash,hashcode,C#,Hash,Hashcode,我应该编写一个应用程序,接受字符串输入并计算字符串的哈希值(输入的最大字符数为16),输出的长度应为22个字符(或更少但不更多),采用base64格式 我看到.NET framework建议使用许多哈希函数,我不知道该使用什么, 有谁能推荐我使用的最佳函数是什么,以及如何将输出限制为22个字符 谢谢您可以使用任何哈希函数,只需将哈希截断为所需大小,然后转换为base-64即可。在您的情况下,您需要将哈希值截断为15个字节,最终为20个字节的base-64。我将重复使用前面的示例 string s

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

我看到.NET framework建议使用许多哈希函数,我不知道该使用什么, 有谁能推荐我使用的最佳函数是什么,以及如何将输出限制为22个字符


谢谢

您可以使用任何哈希函数,只需将哈希截断为所需大小,然后转换为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);

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

您可以使用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);
}

您打算将哈希函数用于加密还是用于哈希表?@Ani:22字节的base64输出建议使用加密哈希函数,而不是哈希表(通常使用机器字大小的哈希)。MD5[Link][1]和SHA-1不再安全。选择SHA-2或SHA-3[1]: