Intereting Posts
Как установить выбранный элемент в раскрывающемся списке Javascript / jQuery: загрузка файла для загрузки Как реализовать собственный поставщик Faker в Laravel Каков наилучший способ определить, на каком сервере работает скрипт, и, следовательно, на PHP? Функция PHP для проверки времени между заданным диапазоном? Как обновить изображение на сервере через форму и отобразить его после отправки? Передача переменной из одного php включает файл в другой: global vs. not Сверхпростой статический файл (html) кэш php сайта Событие триггерного клика в раскрывающемся списке Альтернатива для использования CURLOPT_SSL_VERIFYHOST, 2 Видимость PHP / пакета Как удалить строку из файла с помощью php? Убедитесь, что браузер отображает все сразу PHP Доступ к переменной родительского класса Горизонтальное масштабирование: маршрутизация пользовательских поддоменов между серверами

Что такое .NET-эквивалент функции PHP hash_hmac ()

Я переношу некоторый код с PHP на .NET (я не разработчик PHP), и все это выглядит довольно просто, за исключением следующей строки:

public function hash($message, $secret) { return base64_encode(hash_hmac('sha1', $message, $secret)); } 

Как я могу перенести эту функцию в .NET?

Кодировка base64 выполняется следующим образом, но как я могу реплицировать hash_hmac ()?

Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(tmpString));

Благодаря!

Если вы ищете HMAC, тогда вы должны использовать класс, полученный из [System.Security.Cryptography.HMAC][1] .

hash_hmac ('sha1', $ message, $ secret)

В этом случае это будет [System.Security.Cryptography.HMACSHA1][2] .

UPDATE (более простой код, а не ASCII-зависимый)

 static string Hash (string message, byte[] secretKey) { using (HMACSHA1 hmac = new HMACSHA1(secretKey)) { return Convert.ToBase64String( hmac.ComputeHash(System.Text.UTF8.GetBytes(message)); } } 

Используйте HashAlgorithm , а именно SHA1CryptoServiceProvider , например:

 byte[] SHA1Hash (byte[] data) { using (var sha1 = new SHA1CryptoServiceProvider()) { return sha1.ComputeHash(data); } } 

В итоге мне удалось создать решение на основе класса HMACSHA1:

 private string Hash(string message, byte[] secretKey) { byte[] msgBytes = System.Text.Encoding.UTF8.GetBytes(message); byte[] hashBytes; using (HMACSHA1 hmac = new HMACSHA1(secretKey)) { hashBytes = hmac.ComputeHash(msgBytes); } var sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) sb.Append(hashBytes[i].ToString("x2")); string hexString = sb.ToString(); byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(hexString); return System.Convert.ToBase64String(toEncodeAsBytes); } 

ОБНОВЛЕНО : сжатый код немного – не нужно так много вспомогательных функций.