SHA256 не генерирует правильный хеш в php - PullRequest
0 голосов
/ 03 марта 2019

Ниже приведена процедура создания хэша на основе sha256.

Генерируемый хэш

За параметром строки хеш-запроса должен следовать сгенерированный хэш для этого конкретного запроса.Чтобы сгенерировать хеш:

  1. Возьмите тело запроса HTTP POST
  2. Добавьте предоставленный API-секрет в конец тела
  3. Преобразует его в SHA256 ипреобразует хешированное сообщение в шестнадцатеричный формат

Например, предполагая, что предоставленный API Secret является «secrettapikey», а тело HTTP POST содержит следующее:

{ "apiKey": 123, "invoiceId": 1 }

Сгенерированный хеш будет:

d48cf8a852713844603d7c8cbefb3e81cfb29e7540d98f06affdf58322c1038e

Ниже приведены шаги, предпринятые для создания сгенерированного выше хеша:

HTTP POST Body => { "apiKey": 123, "invoiceId": 1 }

Secret => secrettapikey

Текст для хэширования => { "apiKey": 123, "invoiceId": 1 }secretapikey

SHA-256 Hash => d48cf8a852713844603d7c8cbefb3e81cfb29e7540d98f06affdf58322c1038e

Я должен объединить двастроки ({ "apiKey": 123, "invoiceId": 1 }secretapikey), а затем хэшируйте их для отправки в конечную точку API.Но хэш, сгенерированный следующим кодом, не соответствует хэшу, сгенерированному онлайн-sha256: -

$secretapikey = "secretapikey";
$postbody = array();
$postbody['apiKey'] = "123";
$postbody['invoiceId'] = 1;

$jpb = json_encode($postbody);

$hashed = $jpb.$secretapikey; //Here is Problem. It is not concatenated according to requirement


$result = hash('SHA256', $hashed);

echo $result;

Это значение $result

d2c5d184be42ff4ae3a0046d0727c026f38c1e92f8960cb9d17d496c7b89b7b3

, тогда как оно должно быть

d48cf8a852713844603d7c8cbefb3e81cfb29e7540d98f06affdf58322c1038e

1 Ответ

0 голосов
/ 03 марта 2019

hash('SHA256', $hashed); выполняет свою работу правильно

и $hashed = $jpb.$secretapikey; правильно соединяет две строки.

Причина, по которой вы не получаете ожидаемый хеш, заключается в том, что JSON выдля теста используется

{ "apiKey": 123, "invoiceId": 1 }

, в то время как JSON, производимый json_encode($postbody);

, равен {"apiKey":123,"invoiceId":1}

без пробелы.

...