Что такое .NET-эквивалент PHP-функции hash_hmac () - PullRequest
0 голосов
/ 09 ноября 2011

Я портирую некоторый код из 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));

Спасибо!

Ответы [ 3 ]

2 голосов
/ 09 ноября 2011

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

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

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

ОБНОВЛЕНИЕ (более простой код, не зависящий от ASCII)

static string Hash (string message, byte[] secretKey)
{
    using (HMACSHA1 hmac = new HMACSHA1(secretKey))
    {
        return Convert.ToBase64String(
           hmac.ComputeHash(System.Text.UTF8.GetBytes(message));
    }
}
1 голос
/ 09 ноября 2011

В итоге мне удалось создать решение на основе класса 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);
}

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

1 голос
/ 09 ноября 2011

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

byte[] SHA1Hash (byte[] data)
{
    using (var sha1 = new SHA1CryptoServiceProvider()) 
    {
        return sha1.ComputeHash(data);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...