TL; DR: хотя все три обменов технически "использовать аутентификацию HmacSHA512", Есть существенные различия, и вы не можете использовать точно такой же код для всех трех из них.
API-интерфейсы из MtGox, Bitfloor и CryptoXChange все проверки подлинности запросов при наличии вызывающему включают HmacSHA512-подписи сообщени HTTP POST в качестве дополнительного заголовка. Однако, есть некоторые различия, которые я хочу, чтобы люди знали:
MtGox и Bitfloor использовать ключи, один блок (64 байт) длиной когда Base64-декодированию, в то время как CryptoXChange использует смешные ключи 43-байтовые. Но смотри ниже относительно Bitfloor.
Все три биржи поставить ключ к вам в Base64-закодированной форме. Однако - и это действительно странно часть:
- Bitfloor хочет, чтобы вы использовать буквальный ASCII байты ключа в кодировке base64 в качестве ключа подписи, давая ключ 88 байт.
- CryptoXChange хочет, чтобы вы Base64-декодирование ключа в 43 байт и использовать эти байты.
- MtGox позволит вам сделать или вышеперечисленное, если вы включите свой пароль в POST, как &передать = XXX. На самом деле, вы можете включать в себя полностью поддельном Rest-Sign подпись. Смелее, попробуйте!
Ни одно из этого не упомянуто ни в одном из API ДОКУМЕНТОВ. Я подтвердил все вышесказанное (и то, что работает а также то, что не на каждый обмен) путем натурных испытаний против трех API.
На мой взгляд, то, что Bitfloor делает сломана, то, что CryptoXChange делает правильно, и MtGox это быть хорошим, поддерживая звонки с битым кодом.
Вот некоторые Java-код, который иллюстрирует разницу в точных терминах:
общественности статической строки computeSignature (алгоритм String, String baseString, байт [] ключ)
бросает GeneralSecurityException, UnsupportedEncodingException {
SecretKey SecretKey = NULL;
SecretKey = новый SecretKeySpec (ключ, алгоритм);
Mac Mac = Mac.getInstance (алгоритм);
mac.init (SecretKey);
mac.update (baseString.getBytes ());
вернуть новую строку (Base64.encodeBase64 (mac.doFinal ())) подрезать ().
}
Так CryptoXChange вы
computeSignature ("HmacSHA512", PostBody, Base64.decode (SecretKey))
для Bitfloor вы делаете
computeSignature ("HmacSHA512", PostBody, secretKey.getBytes ())
И MtGox вы можете сделать что-либо до тех пор, как ваш пароль в теле POST.