Будет ли SHA1 Hash в C # всегда и всегда возвращать одно и то же значение для данной строки? - PullRequest
4 голосов
/ 23 июля 2011

Я подумываю об изменении метода, с помощью которого мы шифруем пароли, чтобы использовать односторонний хэш, а не шифрование.Я рассмотрел использование простого «GetHashCode» в строке пароля, но MS предупреждает, что эта функция может измениться в будущем и будет отличаться в 32- и 64-разрядных ОС.Я не хочу, чтобы результат когда-либо был другим, так как это привело бы к тому, что все пароли в базе данных больше не совпадали, когда у меня есть введенное значение (например, когда мы все переходим на .NET 9.0 или что-то в этом роде).

Итак, хэш SHA1 устраняет эту проблему?Например, если я использую этот код C #:

        var data = System.Text.Encoding.ASCII.GetBytes(value);
        data = System.Security.Cryptography.SHA1.Create().ComputeHash(data);
        return Convert.ToBase64String(data);

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

Ответы [ 2 ]

12 голосов
/ 23 июля 2011

Да.

В отличие от GetHashCode, SHA-1 является фиксированным алгоритмом, точно так же, как MD5 и SHA-256, все из которых были "стандартизированы".

4 голосов
/ 23 июля 2011

Да. SHA1 является стандартом, и реализация C # должна соответствовать стандарту и давать те же результаты.

К вашему сведению, SHA1 - не очень хороший способ хэширования паролей, хотя это, безусловно, большое улучшение по сравнению с обратимым шифрованием. SHA1, как и MD5, предназначен для очень быстрого хэширования данных, поэтому его можно легко взломать паролем. Лучшие хеш-функции для паролей предназначены для (относительно) медленной или регулируемой скорости, и их сложно ускорить с помощью аппаратного обеспечения. Платформой, встроенной в .NET, является PBKDF2, которая по существу реализует «растянутый» SHA1 (применяя SHA1 снова и снова к одному и тому же входу, так что это занимает больше времени.) Он реализован в этого класса инфраструктуры.

...