Хэш-строка в С#
У меня проблема при попытке получить хэш-строку в c#
.
Я уже пробовал несколько веб-сайтов, но большинство, если они используют файл для получения хэша. Другие, которые для строки немного сложны. Я нашел примеры для проверки подлинности Windows для сети следующим образом:
FormsAuthentication.HashPasswordForStoringInConfigFile(tbxPassword.Text.Trim(), "md5")
Мне нужно использовать хеш, чтобы строка, содержащая более безопасное имя файла. Как я могу это сделать?
Пример:
string file = "username";
string hash = ??????(username);
Должен ли я использовать другой алгоритм хэширования, а не "md5"?
Ответы
Ответ 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.
Ответ 5
Вот хороший пример из MSDN.
Ответ 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();
}