Подтвердить что ты не робот

Хэш-строка в С#

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

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

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

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

Пример:

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

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

4b9b3361

Ответ 1

using System.Security.Cryptography;

public static byte[] GetHash(string inputString)
{
    HashAlgorithm algorithm = MD5.Create();  //or use 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();
}

Кроме того, рассмотрите "соление" хешей и используйте проверенные криптографические алгоритмы, как это указано в комментариях.

Ответ 2

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

    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 должно быть реорганизовано в поле класса;
  • вывод представлен как закодированная шестнадцатеричная строка;

Ответ 3

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

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

Вот так:

string hash = username.GetHashCode();

Ответ 4

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

Подробнее о шифровании в .NET см. AES в ASP.NET с VB.NET.

Ответ 6

//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();
    }