Как Использовать SHA1 или MD5 в C#? (Какой Лучше в Производительности и безопасности для Аутентификации),

Я также думаю, что № 2 является лучшим выбором, хотя я, несомненно, обернул бы его в транзакцию в случае, если что-то идет неправильная середина обновления.

альтернатива (так как Вы спросили) к обновлению значений Уникального индекса с различными значениями должна будет обновить все другие значения в строках к той из другой строки. Выполнение этого означает, что Вы могли оставить значения Уникального индекса в покое, и в конце, Вы заканчиваете с данными, которые Вы хотите. Будьте осторожны, хотя, в случае, если некоторые другие ссылки на таблицу эта таблица в отношениях Внешнего ключа, что все отношения в DB остаются неповрежденными.

25
задан Sajad Bahmani 23 February 2013 в 08:10
поделиться

4 ответа

Не уверен, что вы подразумеваете под автоматически, но вам действительно следует использовать SHA256 и выше . Также всегда используйте соль ( код ) с вашими хэшами. Примечание: по прошествии времени использование усиленных хешей намного лучше, чем использование простой хеш-функции на основе скорости. То есть: хеширование в течение нескольких сотен итераций или использование уже проверенных функций хеширования, таких как bcrypt (которые, как мне кажется, упоминаются ниже). Пример кода для использования хэш-функции SHA256 в .NET выглядит следующим образом:

byte[] data = new byte[DATA_SIZE];
byte[] result;

using(SHA256 shaM = new SHA256Managed()) {
    result = shaM.ComputeHash(data);
}

Подойдет для вас с помощью SHA256 и находится на MSDN .


Замечание о «взломе» SHA1 : Перспективы взлома SHA-1

35
ответ дан 28 November 2019 в 17:48
поделиться

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("-", "");
}
29
ответ дан 28 November 2019 в 17:48
поделиться

Из 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);
10
ответ дан 28 November 2019 в 17:48
поделиться

Оба слишком быстры, чтобы их можно было использовать, по крайней мере напрямую. Используйте усиление ключа, чтобы «замедлить» процедуру хеширования пароля. Скорость, к сожалению, враг безопасности паролей.

Насколько медленно достаточно медленно? Замедление хэша пароля с ~ микросекунд до ~ сотен миллисекунд не повлияет отрицательно на воспринимаемую производительность вашего приложения... но сделает взлом паролей буквально в сто тысяч раз медленнее.

Подробнее см. в этой статье: http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html

проблема в том, что MD5 работает быстро. Как и его современные конкуренты, такие как SHA1 и SHA256. Скорость — это цель проектирования современного безопасного хэша, потому что хэши являются строительным блоком почти каждой криптосистемы и обычно выполняются по требованию для каждого пакета или сообщения.

Скорость — это именно то, что вам не нужно в хэш-функции пароля.

... отрезок...

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

Тем не менее, используйте BCrypt. SCrypt был недавно разработан, но я сомневаюсь, что для него существуют какие-либо стабильные (или готовые к эксплуатации) библиотеки. Теоретически SCrypt претендует на улучшение BCrypt.«Создание собственного» не рекомендуется, но повторение MD5 / SHA1 / SHA256 тысячи раз должно помочь (например, усиление ключа).

А если вы о них не знаете, обязательно почитайте о Rainbow Tables. Основные элементы безопасности.

11
ответ дан 28 November 2019 в 17:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: