В С#, как мы можем использовать SHA1 автоматически?
SHA1 лучше, чем MD5? (Мы используем хэширование для имени пользователя и пароля и требуем скорости для аутентификации)
Как использовать SHA1 или MD5 в С#? (Какой из них лучше в производительности и безопасности для аутентификации)
Ответ 1
Не уверен, что вы подразумеваете под автоматически, но вы действительно должны использовать SHA256
и выше. Также всегда использовать Соль (code) с вашими хешами. Сторона примечания, по прошествии времени, использование упрочненных хэшей намного лучше, чем использование простой хэш-функции на основе скорости. I.e: хеширование более нескольких итераций или использование уже проверенных хэширующих функций, таких как bcrypt
(о чем я упоминал ниже, я считаю). Пример кода для использования хэш-функции SHA256 в .NET выглядит следующим образом:
byte[] data = new byte[DATA_SIZE];
byte[] result;
using(SHA256 shaM = new SHA256Managed()) {
result = shaM.ComputeHash(data);
}
Сделаем трюк для вас, используя SHA256, и его можно найти в MSDN.
Sidenote о "взломе" SHA1: Включение взлома SHA-1 в перспективе
Ответ 2
SHA1 сильнее MD5, поэтому, если у вас есть выбор, было бы лучше использовать его. Вот пример:
public static string CalculateSHA1(string text, Encoding enc)
{
byte[] buffer = enc.GetBytes(text);
SHA1CryptoServiceProvider cryptoTransformSHA1 = new SHA1CryptoServiceProvider();
return BitConverter.ToString(cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", "");
}
Ответ 3
От MSDN
byte[] data = new byte[DATA_SIZE];
byte[] result;
SHA1 sha = new SHA1CryptoServiceProvider();
// This is one implementation of the abstract class SHA1.
result = sha.ComputeHash(data);
Ответ 4
Оба слишком быстры, чтобы использоваться, по крайней мере, по крайней мере. Используйте "Укрепление ключа", чтобы "замедлить" процедуру хэширования пароля. Скорость, к сожалению, является противником защиты паролем.
Как медленно идет достаточно медленно? Замедление хэша паролей от ~ микросекунд до ~ сотен миллисекунд не будет отрицательно влиять на воспринимаемую производительность вашего приложения... но сделает взломать пароли буквально на сто тысяч раз медленнее.
Просмотрите эту статью для получения более подробной информации: http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html
Проблема в том, что MD5 работает быстро. Так же и его современные конкуренты, такие как SHA1 и SHA256. Скорость - это цель дизайна современного безопасного хэша, поскольку хеши являются строительным блоком почти каждой криптосистемы и обычно получают запрос по требованию для каждого пакета или для каждого сообщения.
Скорость - это именно то, чего вы не хотите в хэш-функции пароля.
... snip...
Игра с парольной атакой забивается вовремя, чтобы взломать пароль X. С радужными столами время зависит от того, насколько велика ваша таблица и насколько быстро вы можете ее искать. С инкрементными взломщиками время зависит от того, насколько быстро вы можете запустить хеш-функцию пароля.
Тем не менее, используйте BCrypt. Недавно был разработан SCrypt, но я сомневаюсь, что для него существуют все стабильные (или готовые к выпуску) библиотеки. Теоретически SCrypt утверждает, что улучшает BCrypt. "Построение собственного" не рекомендуется, но итерация MD5/SHA1/SHA256 в тысячи раз должна делать трюк (то есть: усиление ключа).
И в случае, если вы не знаете о них, обязательно прочитайте в Радужных таблицах. Основные элементы безопасности.
Ответ 5
использовать SHA1 или SHA2. Алгоритм MD5 проблематичен.
http://userpages.umbc.edu/~mabzug1/cs/md5/md5.html http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5%28v=vs .85%29.aspx
Ответ 6
Я бы хотел использовать эти вещи.
MD5, SHA1/256/384/512 с необязательным параметром кодирования.
Othere HashAlgorithms. Спасибо Дарину Димитрову.
public static string MD5Of(string text)
{
return MD5Of(text, Encoding.Default);
}
public static string MD5Of(string text, Encoding enc)
{
return HashOf<MD5CryptoServiceProvider>(text, enc);
}
public static string SHA1Of(string text)
{
return SHA1Of(text, Encoding.Default);
}
public static string SHA1Of(string text, Encoding enc)
{
return HashOf<SHA1CryptoServiceProvider>(text, enc);
}
public static string SHA384Of(string text)
{
return SHA384Of(text, Encoding.Default);
}
public static string SHA384Of(string text, Encoding enc)
{
return HashOf<SHA384CryptoServiceProvider>(text, enc);
}
public static string SHA512Of(string text)
{
return SHA512Of(text, Encoding.Default);
}
public static string SHA512Of(string text, Encoding enc)
{
return HashOf<SHA512CryptoServiceProvider>(text, enc);
}
public static string SHA256Of(string text)
{
return SHA256Of(text, Encoding.Default);
}
public static string SHA256Of(string text, Encoding enc)
{
return HashOf<SHA256CryptoServiceProvider>(text, enc);
}
public static string HashOf<TP>(string text, Encoding enc)
where TP: HashAlgorithm, new()
{
var buffer = enc.GetBytes(text);
var provider = new TP();
return BitConverter.ToString(provider.ComputeHash(buffer)).Replace("-", "");
}
Ответ 7
MD5 лучше работает, а SHA1 лучше для безопасности. Вы можете получить представление об этом сравнении