【发布时间】:2017-03-14 11:06:22
【问题描述】:
我正在尝试学习 Angular2,作为第一个练习,我想从 Kraken.com API 检索数据。 (我知道,我本可以选择更简单的:)
好吧,对于“公共”电话来说,它工作得很好。现在我正在尝试调用“私人”方法。 (那些需要认证)
正如这里所说: https://www.kraken.com/help/api
预期的签名是:
API-Sign = Message signature using HMAC-SHA512 of (URI path + SHA256(nonce + POST data)) and base64 decoded secret API key
所以我正在尝试生成...没有成功...我不断收到此错误消息:
Kraken API returned an error: API:Invalid nonce
但我很确定我的 nonce 是正确的,所以我宁愿认为它与数据加密有关。
我找到了 here 一个可以完成这项工作的函数,但我不能在我的 Angular 项目中“按原样”使用它。
/**
* This method returns a signature for a request as a Base64-encoded string
* @param {String} path The relative URL path for the request
* @param {Object} request The POST body
* @param {Integer} nonce A unique, incrementing integer
* @return {String} The request signature
*/
function getMessageSignature(path, request, nonce) {
var message = querystring.stringify(request);
var secret = new Buffer(config.secret, 'base64');
var hash = new crypto.createHash('sha256');
var hmac = new crypto.createHmac('sha512', secret);
var hash_digest = hash.update(nonce + message).digest('binary');
var hmac_digest = hmac.update(path + hash_digest, 'binary').digest('base64');
return hmac_digest;
}
这是我的代码:
private getMessageSignature(path: string, request: any, nonce: number) {
//API-Sign = Message signature using HMAC-SHA512 of (URI path + SHA256(nonce + POST data)) and base64 decoded secret API key
var message = this.querystring.stringify(request);
var secret = this.CryptoJS.enc.Base64.parse(this.config.secret);
var hash_digest = this.CryptoJS.SHA256(nonce + message);
var hmac = this.CryptoJS.HmacSHA512(path + hash_digest, secret).toString(this.CryptoJS.enc.Base64);
return hmac;
}
【问题讨论】:
标签: javascript angular encoding cryptography cryptojs