Разный результат hash_hmac шифрования, помогите )

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
Добрый день, подскажите, что я делаю не так.
Нужно зашифровать строку hash_hmac , а потом результат забить в base64, на кубиком и в php получаю разный результат.
Вот пример:
На пхп
PHP:
$text = "тестирование запроса";
$key = "123ключ123";
$signature = hash_hmac('sha256', $text, $key, true);
echo "Хэщ ".$signature."<br/>";
echo  base64_encode($signature);
получаем: armO0naL+YzXidS/59zX3qCtDMS1k8JCDeQ+f5riqEk=

Кубиком c#
C#:
string result = "тестирование запроса";
string secret = "123ключ123";
HMACSHA256 hmc = new  HMACSHA256(Encoding.ASCII.GetBytes(secret));
byte[] rez = hmc.ComputeHash(Encoding.ASCII.GetBytes(result));
return Convert.ToBase64String(rez);
получаем Xr/RG2Hy/GsUfVEJmgsCu2WsnBhlRi4ZJHxcMze2xt4=

Подскажите, в чём просчёт )
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Добрый день, подскажите, что я делаю не так.
Нужно зашифровать строку hash_hmac , а потом результат забить в base64, на кубиком и в php получаю разный результат.
Вот пример:
На пхп
PHP:
$text = "тестирование запроса";
$key = "123ключ123";
$signature = hash_hmac('sha256', $text, $key, true);
echo "Хэщ ".$signature."<br/>";
echo  base64_encode($signature);
получаем: armO0naL+YzXidS/59zX3qCtDMS1k8JCDeQ+f5riqEk=

Кубиком c#
C#:
string result = "тестирование запроса";
string secret = "123ключ123";
HMACSHA256 hmc = new  HMACSHA256(Encoding.ASCII.GetBytes(secret));
byte[] rez = hmc.ComputeHash(Encoding.ASCII.GetBytes(result));
return Convert.ToBase64String(rez);
получаем Xr/RG2Hy/GsUfVEJmgsCu2WsnBhlRi4ZJHxcMze2xt4=

Подскажите, в чём просчёт )
Дело в кодировке UTF8 (у Вас ANSI в C# и UTF-8 в PHP)
C#:
string result = "тестирование запроса";
string secret = "123ключ123";
string sha256 = string.Empty;
using (var hmc = new  System.Security.Cryptography.HMACSHA256(Encoding.UTF8.GetBytes(secret))){
    sha256 = Convert.ToBase64String(hmc.ComputeHash(Encoding.UTF8.GetBytes(result)));
}
return sha256;
20:28:00 Выполнение кода C# Результат: armO0naL+YzXidS/59zX3qCtDMS1k8JCDeQ+f5riqEk=

Пример через функцию (иногда полезно):
string result = "тестирование запроса";
string secret = "123ключ123";
string sha256 = string.Empty;

Func<string, string, string> Sha256 = delegate(string key, string data){
    string line = string.Empty;
    using (var hmc = new  System.Security.Cryptography.HMACSHA256(Encoding.UTF8.GetBytes(key))){
        line = Convert.ToBase64String(hmc.ComputeHash(Encoding.UTF8.GetBytes(data)));
    }
    return line;
};

return Sha256(secret, result); // Здесь дёргаем...
 
Последнее редактирование:

Shogo

Client
Регистрация
07.04.2015
Сообщения
474
Благодарностей
100
Баллы
43
Спасибо огромное Юрий! Вы в который раз очень выручаете )
 
  • Спасибо
Реакции: BAZAg

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)