Строка хеша в c # - PullRequest
       8

Строка хеша в c #

64 голосов
/ 21 октября 2010

У меня проблема при попытке получить хеш-строку в c#.

Я уже пробовал несколько сайтов, но большинство из них используют файлы для получения хеша.Другие, которые для строк, являются слишком сложными.Я нашел примеры проверки подлинности Windows для веб-сайтов, например:

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

Мне нужно использовать хэш, чтобы сделать строку, содержащую имя файла, более безопасной.Как я могу это сделать?

Пример:

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

Должен ли я использовать другой алгоритм хеширования, а не "md5"?

Ответы [ 5 ]

141 голосов
/ 27 июля 2011
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 являются устаревшими и небезопасными алгоритмами, в этом решении используется SHA256.Кроме того, вы можете использовать BCrypt или Scrypt , как указано в комментариях.
  • Также рассмотрите " salting " ваши хэши и используйте проверенные криптографическиеалгоритмы, как указано в комментариях.
45 голосов
/ 14 января 2014

Самый быстрый способ получить хеш-строку для хранения паролей - это следующий код:

    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 голосов
/ 21 октября 2010

Я не совсем понимаю весь объем вашего вопроса, но если все, что вам нужно, это хеш строки, то очень легко его получить.

Просто используйте метод GetHashCode.

Как это:

string hash = username.GetHashCode();
5 голосов
/ 21 октября 2010

Я думаю, что вы ищете не хеширование, а шифрование. С хэшированием вы не сможете получить исходное имя файла из переменной «хеш». С шифрованием вы можете, и это безопасно.

См. AES в ASP.NET с VB.NET для получения дополнительной информации о шифровании в .NET.

2 голосов
/ 10 мая 2015
//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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...