2

我正在尝试按照https://dev.twitter.com/docs/auth/creating-signature中的说明在 Android Java 中为 Twitter REST API 执行 Oauth 1.0a 。我可以完全按照指南中所示复制签名库。

POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nouce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521

签名密钥也完全匹配。但是当我使用以下代码生成 HMAC-SHA1 摘要时,我所拥有的十六进制与指南中显示的不同。

private String hmac_sha1(String Base, String Key){

    Mac mac;
    try {
        mac = Mac.getInstance("HmacSHA1");
        SecretKeySpec secret = new SecretKeySpec(Key.getBytes("UTF-8"), "HmacSHA1");
        mac.init(secret);
        byte[] digest = mac.doFinal(Base.getBytes("UTF-8"));

        Log.i("hex",bytesToHex(digest));

        return Base64.encodeToString(digest, Base64.NO_WRAP);

        //return new String(Base64.encode(digest,Base64.NO_WRAP));

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    return "";
}

我得到 13 5D F8 C7 60 27 D5 26 69 23 D2 C3 05 A1 68 5C B3 1F 55 4B 的不是 Twitter 指南所拥有的 B6 79 C0 AF 18 F4 E9 C5 87 AB 8E 20 0A CD 4E 48 A9 3F 8C B6

有什么明显的我可能错过的吗?

4

1 回答 1

0

我在我的代码中拼错了 nonce ...我有 nouce 而不是 nonce。在更正之后,一切都匹配。

于 2014-04-17T18:45:36.067 回答