簡體   English   中英

原始 javascript 中的 sha256 加密

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM