繁体   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