несоответствие хэша hmac в PHP и Golang - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь подключиться к API, который использует устаревший механизм аутентификации хэша hmac для API.

Для экземпляра:

$signature = hash_hmac('sha256', $string_to_sign, $api_sec);

против сгенерированного в Go:

h := hmac.New(sha256.New, []byte(authSecret))
h.Write([]byte(stringToSign))
signature := hex.EncodeToString(h.Sum(nil))

Когда я использую ту же stringToSign($string_to_sign) и такую ​​же authSecret($api_sec) подписьгенерируется с результатами Go в качестве недопустимой подписи для API.Но если я создаю то же самое с помощью функции PHP, она работает нормально.Я немного растерялся относительно того, где искать.

1 Ответ

0 голосов
/ 18 февраля 2019

Должна быть проблема с вашими входными данными.

Использование приведенного ниже PHP:

echo hash_hmac('sha256', 'data', 'key');

И приведенное ниже Go:

h := hmac.New(sha256.New, []byte("key"))
h.Write([]byte("data"))
signature := hex.EncodeToString(h.Sum(nil))
fmt.Println(signature)

Я получаютот же результат 5031fe3d989c6d1537a013fa6e739da23463fdaec3b70137d828e36ace221bd0

...