в чем разница между SHA1CryptoServiceProvider и HMACSHA1 - PullRequest
0 голосов
/ 05 июня 2019

Мне интересно, в чем разница между этими функциями хеширования:

System.Security.Cryptography

Кажется, они дают разные результаты. В прошлом я успешно использовал HMACSHA1 с ключом.

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

// y1 = "2jmj7l5rSw0yVb/vlWAYkK/YBwk=" (seems correct)
var f1 = new SHA1CryptoServiceProvider();
string y1 = Convert.ToBase64String(f1.ComputeHash(new byte[] { }));

// y2 = "+9sdGxiqbAgyS31ktx+3Y3BpDh0=" (seems wrong)
HMAC f2 = HMACSHA1.Create();
f2.Key = new byte[]{};
string y2 = Convert.ToBase64String(f2.ComputeHash(new byte[] { }));

EDIT

Контекст: я пытаюсь реализовать OAuth 1.0 с SHA512, потому что я не смог найти библиотеку .NET, которая это делает (я знаю, что SHA1 слаб). У меня уже есть вычисление подписи с использованием HMACSHA1.Create (), хотя вызов Create может не выполнять то, что я ожидаю, как указал один из вас. Я пытался реализовать параметр oauth_body_hash:

https://tools.ietf.org/id/draft-eaton-oauth-bodyhash-00.html#anchor16

Именно тогда я заметил, что HMACSHA1.Create () не создает правильный хеш, даже если он работает для oauth_signature. SHA1CryptoServiceProvider действительно работал для oauth_body_hash. Идея использования SHA1 заключается в том, что в сети есть еще несколько примеров. После этого я хочу изменить его на SHA512

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

HMAC - это тип MAC, то есть код аутентификации сообщения. Он используется, когда вам нужно, например, чтобы убедиться, что сообщение, которое вы получили, действительно получено от кого-то, кому вы доверяете (т. е. у вас есть ключ для проверки этого).

SHA-1 - это просто хеш-функция без какой-либо проверки, т. Е. Просто отпечаток. Можно использовать, например, чтобы убедиться в правильности загруженного файла (то есть, если вы знаете хеш с веб-сайта, вы можете загрузить файл, рассчитать хеш и выяснить, что он равен данному)

Также я не советую писать свои собственные библиотеки OAuth, если вы действительно не знаете, что делаете, или у вас нет других вариантов (например, хорошо известных доверенных библиотек), которые я предлагаю вам использовать.

0 голосов
/ 05 июня 2019

Прежде всего, вы не должны использовать sha1.Используйте sha256.

Разница в том, что HMAC является хешем с ключом.Это означает, что вывод хеша основан на заданном ключе.Например, хеш «test» с ключом «123» отличается от хеша «test» с ключом «456»

Википедия: https://de.wikipedia.org/wiki/Keyed-Hash_Message_Authentication_Code

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...