关于原始javascript中的html:sha256加密

sha256 encryption in raw javascript

我正在尝试使用网络托管库在原始javascript中将字符串加密为HMAC SHA256,但似乎无法正常工作。
我正在尝试执行此操作以调用Coinbase API。 您需要在GET请求中提供一些值,包括签名,这是我遇到问题的地方。 签名需要经过HMAC SHA256加密。 签名应包括以下内容:

The CB-ACCESS-SIGN header is generated by creating a sha256 HMAC using the secret key on the prehash string timestamp + method + requestPath + body (where + represents string concatenation). The timestamp value is the same as the CB-ACCESS-TIMESTAMP header.

The body is the request body string or omitted if there is no request body (typically for GET requests).

The method should be UPPER CASE.

我认为他们在说的是,我可以省略身体,因为这是GET请求。

我的代码如下:

HTML库调用:

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

Javascript加密和GET请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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响应:

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

表示除签名外,其他所有内容都是正确的。

谢谢。


我自己就能弄清楚(云海也看到了其中一个问题)。

问题是:

  • HMAC加密需要我的API_SECRET

  • 我需要使用URL参数,而不是整个URL。