为了账号安全,请及时绑定邮箱和手机立即绑定

使用nodejs/python实现bitmex API的签名signature

其实不光是bitmex,现在主流的数字货币交易网站都是采用类似的API认证方式,因此,本篇文章其实是适用于火币,OKEX等其他交易所的签名生成的

数字货币交易所的API安全认证

securityDefinitions":{"apiKey":{"type":"apiKey","in":"header","name":"api-key"},"apiSignature":{"type":"apiKey","in":"header","name":"api-signature"},"apiExpires":{"type":"apiKey","in":"header","name":"api-expires"}},"security":[{"apiKey":[],"apiSignature":[],"apiExpires":[]}]}

一般来说都是3个值需要配置:

  • api-expires: 本次API调用的有效时间,超过该时间调用失效,避免重放攻击
  • api-key: 与你的api-secret是一个pair对,一一对应,知道了api-key即可查询到api-secret
  • api-signature: api-secretmessage一起生成的签名,这里的message一般包括:
    • verb
    • url
    • nonce
    • data

举例:'POST/api/v1/order1416993995705{"symbol":"XBTZ14","quantity":1,"price":395.01}',如果是GET,没有body的话,则data为''

api-signature的生成规则一般为:
hmac_sha256,输出值需转化为 hex

这里,假设我们有一组KEY和SECRET:

API_KEY = "096oNuabZ57u9IozHP9vdpOx"
API_SECRET = “hqMMxKBYtYJ2bLQayvxVd3aqPXEz_KVIHImqq17oTbzmmVBJ”

python 实现

import hashlib
import hmac
from future.builtins import bytes

secret = bytes("hqMMxKBYtYJ2bLQayvxVd3aqPXEz_KVIHImqq17oTbzmmVBJ",'utf8')
message = bytes('POST/api/v1/order1416993995705{"symbol":"XBTZ14","quantity":1,"price":395.01}','utf8')
print(hmac.new(secret,message, digestmod=hashlib.sha256).hexdigest())

输出为:

a0719c00dbd3f5a3bcdd5a63af1473e7c5cfbd3fd504eae8a6cdbf3938a7821f

nodejs 实现

先定义同样的变量:

let secret = "hqMMxKBYtYJ2bLQayvxVd3aqPXEz_KVIHImqq17oTbzmmVBJ";
let message = 'POST/api/v1/order1416993995705{"symbol":"XBTZ14","quantity":1,"price":395.01}';

crypto

var crypto = require('crypto');

console.log(crypto.createHmac('sha256', secret).update(message).digest('hex'));

输出为:

a0719c00dbd3f5a3bcdd5a63af1473e7c5cfbd3fd504eae8a6cdbf3938a7821f

crypto-js

var CryptoJS = require('crypto-js')
console.log(CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(message,secret)) )

这里特别注意,CryptoJS.HmacSHA256的参数顺序,message在前面,secret在后面
输出为:

a0719c00dbd3f5a3bcdd5a63af1473e7c5cfbd3fd504eae8a6cdbf3938a7821f
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消