6

ビットスタンプの新しい認証は、次のように述べています。

署名は、ノンス、クライアント ID、および API キーを含む HMAC-SHA256 でエンコードされたメッセージです。HMAC-SHA256 コードは、API キーで生成された秘密鍵を使用して生成する必要があります。このコードは、16 進数表現 (大文字 64 文字) に変換する必要があります。アッパー()

出典:リンク

新しい署名 (およびその他のパラメーター) を追加する次のコードがあります。

public void AddApiAuthentication(RestRequest restRequest)
    {
        var nonce = DateTime.Now.Ticks;
        var signature = GetSignature(nonce, apiKey, apiSecret, clientId);

        restRequest.AddParameter("key", apiKey);
        restRequest.AddParameter("signature", signature);
        restRequest.AddParameter("nonce", nonce);

    }

    private string GetSignature(long nonce, string key, string secret, string clientId)
    {
        string msg = string.Format("{0}{1}{2}", nonce,
            clientId,
            key);

        return ByteArrayToString(SignHMACSHA256(secret, StrinToByteArray(msg))).ToUpper();
    }
    public static byte[] SignHMACSHA256(String key, byte[] data)
    {
        HMACSHA256 hashMaker = new HMACSHA256(Encoding.ASCII.GetBytes(key));
        return hashMaker.ComputeHash(data);
    }

    public static byte[] StrinToByteArray(string str)
    {
        byte[] bytes = new byte[str.Length * sizeof(char)];
        System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
        return bytes;
    }

    public static string ByteArrayToString(byte[] hash)
    {
        return BitConverter.ToString(hash).Replace("-", "").ToLower();
    }

そして、私はこのエラーを受け取ります:

{"エラー": "無効な署名"}

誰が問題が何であるか考えましたか? パラメータを 100 回チェックしましたが、それらは間違っていません。たぶん、誰かが新しい認証のために (C# で) 動作するコードを手に入れたのでしょうか?

アップデート

Abhinav は正しく、StringToByteArray メソッドは間違っていました (タイプミスだけでなく:P) 作業コードは次のとおりです。

public static byte[] StrinToByteArray(string str)
    {
        return System.Text.Encoding.ASCII.GetBytes(str);
    }
4

1 に答える 1

5

あなたが使用str.ToCharArray()StrinToByteArrayている in は正しくありません (同じシステムで使用されている場合にのみ正しい)。ASCIIエンコーディングか何かを使用する必要があります。

于 2013-10-31T21:52:22.307 に答える