шифрование sha256 в необработанном виде javascript - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь зашифровать строку в HMA C SHA256 в raw javascript, используя веб-библиотеку , но, похоже, она не работает. Я пытаюсь сделать это, чтобы вызвать Coinbase API . Вам нужно указать несколько значений в запросе GET, включая подпись, где у меня возникают проблемы. Подпись должна быть зашифрована HMA C SHA256. Подпись должна включать следующее:

Заголовок CB-ACCESS-SIGN генерируется путем создания sha256 HMA C с использованием секретного ключа на preha sh string timestamp + method + requestPath + body (где + представляет строку конкатенация). Значение метки времени совпадает с заголовком CB-ACCESS-TIMESTAMP.

body является строкой тела запроса или опускается, если тела запроса нет (обычно для запросов GET).

method должно быть в верхнем регистре.

Я думаю, они говорят, что я могу опустить тело, потому что это запрос GET.

Мой код следующий:

Вызов библиотеки HTML:

<script src="https://cdnjs.cloudflare.com/ajax/libs/js-sha256/0.9.0/sha256.js"></script>

Запрос Javascript Шифрование и GET:

url = "https://api.coinbase.com/v2/accounts"
var xmlHttp1 = new XMLHttpRequest();
xmlHttp1.open( "GET", "https://api.coinbase.com/v2/time", false);
xmlHttp1.send( null )
ts = xmlHttp1.responseText;
var ts1 = JSON.parse(ts)
var message = ts1.data.epoch + "GET" + url + ""
sha256(message);
var hash = sha256.hmac.create('key');

var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", url, false ); // false for synchronous request
xmlHttp.setRequestHeader("CB-ACCESS-KEY", "XXXXXXXXXXXXXXXX");
xmlHttp.setRequestHeader("CB-ACCESS-TIMESTAMP", ts1.data.epoch);
xmlHttp.setRequestHeader("CB-ACCESS-SIGN", hash);
xmlHttp.send( null );

API-интерфейс coinbase отвечает:

{"errors":[{"id":"authentication_error","message":"invalid signature"}]}

означает, что все правильно, кроме подписи.

Спасибо.

1 Ответ

1 голос
/ 17 января 2020

Я смог понять это сам (Юньхай также видел 1 из проблем).

Проблемы были:

  • Требуется шифрование HMA C мой API_SECRET

  • Мне нужно было использовать параметры URL, а не весь URL.

...