c#中的哈希字符串

问题描述 投票:61回答:5

尝试在c#中获取哈希字符串时遇到问题。

我已经尝试了几个网站,但大多数网站都使用文件来获取哈希值。其他用于字符串的东西有点过于复杂。我找到了像这样的Web身份验证示例:

FormsAuthentication.HashPasswordForStoringInConfigFile(tbxPassword.Text.Trim(), "md5")

我需要使用哈希来创建一个包含更安全的文件名的字符串。我怎样才能做到这一点?

例:

string file  = "username";
string hash = ??????(username); 

我应该使用其他哈希算法而不是“md5”吗?

c# string hash
5个回答
150
投票
using System.Security.Cryptography;

public static byte[] GetHash(string inputString)
{
    HashAlgorithm algorithm = SHA256.Create();
    return algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString));
}

public static string GetHashString(string inputString)
{
    StringBuilder sb = new StringBuilder();
    foreach (byte b in GetHash(inputString))
        sb.Append(b.ToString("X2"));

    return sb.ToString();
}

补充说明

  • 由于MD5和SHA1是obsolete and insecure算法,因此该解决方案使用SHA256。或者,您可以在评论中指出使用BCryptScrypt
  • 另外,正如评论中所指出的那样,将“salting”视为您的哈希并使用经过验证的加密算法。

45
投票

获取用于密码存储目的的哈希字符串的最快方法是以下代码:

    internal static string GetStringSha256Hash(string text)
    {
        if (String.IsNullOrEmpty(text))
            return String.Empty;

        using (var sha = new System.Security.Cryptography.SHA256Managed())
        {
            byte[] textData = System.Text.Encoding.UTF8.GetBytes(text);
            byte[] hash = sha.ComputeHash(textData);
            return BitConverter.ToString(hash).Replace("-", String.Empty);
        }
    }

备注:

  • 如果经常调用该方法,则应将sha变量的创建重构为类字段;
  • 输出以编码的十六进制字符串表示;

6
投票

我并不完全理解你的问题的全部范围,但如果你需要的只是字符串的哈希值,那么很容易得到它。

只需使用GetHashCode方法即可。

像这样:

string hash = username.GetHashCode();

5
投票

我认为你所寻找的不是散列而是加密。使用散列,您将无法从“散列”变量中检索原始文件名。使用加密,您可以,并且它是安全的。

有关.NET加密的更多信息,请参阅AES in ASP.NET with VB.NET


2
投票
//Secure & Encrypte Data
    public static string HashSHA1(string value)
    {
        var sha1 = SHA1.Create();
        var inputBytes = Encoding.ASCII.GetBytes(value);
        var hash = sha1.ComputeHash(inputBytes);
        var sb = new StringBuilder();
        for (var i = 0; i < hash.Length; i++)
        {
            sb.Append(hash[i].ToString("X2"));
        }
        return sb.ToString();
    }
© www.soinside.com 2019 - 2024. All rights reserved.