aer*_*que 6 bash curl api openssl base64
我一直在尝试为 Kraken 私有 API ( https://www.kraken.com/help/api )实现一个客户端,因为我遇到了一些问题,我一直在尝试访问它带有卷曲的 API。
但是,我终生无法让它工作,我想我可能没有使用正确的命令行工具来生成哈希和摘要。
访问私有 API 时,需要将以下标头添加到请求中:
API-Key = «key»
API-Sign = Message signature using HMAC-SHA512 of (URI path + SHA256(nonce + POST data)) and base64 decoded «secret»
Run Code Online (Sandbox Code Playgroud)
在命令行上,我执行以下步骤:
echo -n "123nonce=123" | openssl sha256
结果: (stdin)= 353f9df92ab1d5e5afe06bb7d1bb42a8ef6654b633d94818007aeafbaf03ca3d
echo -n "/0/private/Balance353f9df92ab1d5e5afe06bb7d1bb42a8ef6654b633d94818007aeafbaf03ca3d" | openssl sha512 -hmac $(echo -n "wqtzZWNyZXTCuw==" | base64 -d)
结果: (stdin)= 6f19f8f058b0e6dc835692840ccdebc1c415f00d42b75b3d3c21ef5fd43f006e30cc9b51c63aba3268a534bf68978d60d2362bffd31c8125553fb8ec41b2f64d
echo -n "6f19f8f058b0e6dc835692840ccdebc1c415f00d42b75b3d3c21ef5fd43f006e30cc9b51c63aba3268a534bf68978d60d2362bffd31c8125553fb8ec41b2f64d" | base64
结果:
NmYxOWY4ZjA1OGIwZTZkYzgzNTY5Mjg0MGNjZGViYzFjNDE1ZjAwZDQyYjc1YjNkM2MyMWVmNWZk
NDNmMDA2ZTMwY2M5YjUxYzYzYWJhMzI2OGE1MzRiZjY4OTc4ZDYwZDIzNjJiZmZkMzFjODEyNTU1
M2ZiOGVjNDFiMmY2NGQ=
Run Code Online (Sandbox Code Playgroud)
curl -X POST -H "Accept: application/json" -H "API-Key: «key»" -H "API-Sign: NmYxOWY4ZjA1OGIwZTZkYzgzNTY5Mjg0MGNjZGViYzFjNDE1ZjAwZDQyYjc1YjNkM2MyMWVmNWZkNDNmMDA2ZTMwY2M5YjUxYzYzYWJhMzI2OGE1MzRiZjY4OTc4ZDYwZDIzNjJiZmZkMzFjODEyNTU1M2ZiOGVjNDFiMmY2NGQ=" -d "nonce=123" https://api.kraken.com/0/private/Balance
结果(假设有效的 «key» 和 «secret»): {"error":["EAPI:Invalid signature"]}
但无论我尝试哪种排列,我都会收到“无效签名”错误。
这些排列包括但不限于:
感谢meuh我想通了这个问题。因为我可以想象其他人和我一样愚蠢,所以我将回答我自己的问题:
问题是我使用的是字符串而不是字节。我没有时间弄清楚命令行和 cURL(也许其他人想要这样做,我会接受那个答案)。
对于我正在处理的客户端,我应该连接“/0/private/Balance”()和 SHA256(“123nonce=123”)()(这次显示为十进制值)的字节,而不是连接/0/private/Balance
和 SHA256 十六进制字符串)。353f9df92ab1d5e5afe06bb7d1bb42a8ef6654b633d94818007aeafbaf03ca3d
47 48 47 112 114 105 118 97 116 101 47 66 97 108 97 110 99 101
53 63 157 249 42 177 213 229 175 224 107 183 209 187 66 168 239 102 84 182 51 217 72 24 0 122 234 251 175 3 202 61
SHA512 HMAC 也是如此。
编辑:
由于有人在 Twitter 上询问,这些是在命令行上执行此操作的实际步骤:
echo -n "/0/private/Balance" > tmp.bin
echo -n "123nonce=123" | openssl sha256 -binary >> tmp.bin
cat tmp.bin | openssl sha512 -binary -hmac $(echo -n "wqtzZWNyZXTCuw==" | base64 -d) | base64
(“wqtzZWNyZXTCuw==”是“«秘密»”BASE64编码,这当然应该是你的秘密)curl -X POST -H "Accept: application/json" -H "API-Key: «key»" -H "API-Sign: «output-from-step-3»" -d "nonce=123" https://api.kraken.com/0/private/Balance
正如您在上面看到的,原始问题中被遗忘的一件事是使用-binary
开关。
注意:您的 API 密钥和秘密将最终出现在命令行(用 可见ps aux
)和您的 shell 历史记录中!
归档时间: |
|
查看次数: |
4298 次 |
最近记录: |