Благодаря meuh я понял проблему. Поскольку я могу представить, что другие люди такие же глупые, как я, я отвечу на свой вопрос:
Проблема в том, что я использую строки вместо байтов. У меня нет времени, чтобы выяснить это для командной строки и cURL (возможно, кто-то еще хочет сделать это, и я приму этот ответ).
Для клиента, над которым я работал, вместо конкатенации /0/private/Balance
и шестнадцатеричной строки SHA256 353f9df92ab1d5e5afe06bb7d1bb42a8ef6654b633d94818007aeafbaf03ca3d
я должен объединить байты для "/ 0 / private / Balance" ( 47 48 47 112 114 105 118 97 116 101 47 66 97 108 97 110 99 101
) и SHA256 ("123nonce = 123") ( 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.
Редактировать:
Так как кто-то спросил в Твиттере, это реальные шаги, чтобы сделать это в командной строке:
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 ==" is "« secret »" в кодировке 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
) и в истории вашей оболочки!