[英]sha256 encryption in raw javascript
我正在嘗試使用網絡托管庫在原始 javascript 中將字符串加密為 HMAC SHA256,但它似乎不起作用。 我正在嘗試這樣做以調用Coinbase API 。 您需要為 GET 請求提供一些值,包括簽名,這是我遇到問題的地方。 簽名需要經過 HMAC SHA256 加密。 簽名應包括以下內容:
CB-ACCESS-SIGN
標頭是通過使用 prehash 字符串timestamp + method + requestPath + body
(其中 + 表示字符串連接)上的密鑰創建 sha256 HMAC 生成的。 時間戳值與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 );
coinbase API 響應如下:
{"errors":[{"id":"authentication_error","message":"invalid signature"}]}
這意味着一切都是正確的,除了簽名。
我自己解決了(雲海也看到了其中的1個問題)。
問題是:
HMAC 加密需要我的 API_SECRET
我需要使用 URL 參數,而不是整個 URL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.