У меня проблема при попытке ввести хеш-строку c#
.
Я уже пробовал несколько веб-сайтов, но большинство из них используют файлы для получения хеша. Другие, предназначенные для струнных, слишком сложны. Я нашел такие примеры проверки подлинности Windows в Интернете:
FormsAuthentication.HashPasswordForStoringInConfigFile(tbxPassword.Text.Trim(), "md5")
Мне нужно использовать хеш, чтобы сделать строку, содержащую имя файла, более безопасной. Как я могу это сделать?
Пример:
string file = "username";
string hash = ??????(username);
Должен ли я использовать другой алгоритм хеширования, а не «md5»?
b.ToString("X2")
значит?Самый быстрый способ получить хеш-строку для хранения паролей - это следующий код:
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
переменной должно быть преобразовано в поле класса;источник
SHA1Managed
класс не очень затратный. он потребляет около 130 байт и инициализирует их некоторым статическим значением, но это все. поэтому в большинстве случаев проблем с производительностью быть не должно.SHA1Managed
естьIDisposable
и, следовательно, требуется обернуть его использование вusing
блок.Dispose
метод - очистить внутренний буфер. В противном случае существует риск атаки на память.SHA1Managed
это не дорого, я имею в виду, что его создание - нет. Кроме того, алгоритм хеширования не требует больших затрат. Это должно быть (чрезвычайно) дорогостоящим только тогда, когда вы хотите найти столкновение.Я не совсем понимаю весь объем вашего вопроса, но если все, что вам нужно, это хеш строки, то это очень легко получить.
Просто используйте метод GetHashCode.
Как это:
string hash = username.GetHashCode();
источник
GetHashCode
это не криптографически безопасный алгоритм хеширования. Используйте как минимум SHA256, а еще лучше используйте BCrypt или Scrypt для безопасного алгоритма.Я думаю, что вам нужно не хеширование, а шифрование. С помощью хеширования вы не сможете получить исходное имя файла из переменной "hash". С шифрованием вы можете, и это безопасно.
См. AES в ASP.NET с VB.NET для получения дополнительной информации о шифровании в .NET.
источник
//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(); }
источник
Если производительность не является серьезной проблемой, вы также можете использовать любой из этих методов:
(Если вы хотите, чтобы хеш-строка была в верхнем регистре, замените ее
"x2"
на"X2"
.)public static string SHA256ToString(string s) { using (var alg = SHA256.Create()) return string.Join(null, alg.ComputeHash(Encoding.UTF8.GetBytes(s)).Select(x => x.ToString("x2"))); }
или:
public static string SHA256ToString(string s) { using (var alg = SHA256.Create()) return alg.ComputeHash(Encoding.UTF8.GetBytes(s)).Aggregate(new StringBuilder(), (sb, x) => sb.Append(x.ToString("x2"))).ToString(); }
источник
Самый короткий и быстрый способ. Всего 1 строчка!
public static string StringSha256Hash(string text) => string.IsNullOrEmpty(text) ? string.Empty : BitConverter.ToString(new System.Security.Cryptography.SHA256Managed().ComputeHash(System.Text.Encoding.UTF8.GetBytes(text))).Replace("-", string.Empty);
источник