【问题标题】:My HMACSHA1 Digest Doesn't Match What Twitter Has for Oauth 1.0a我的 HMACSHA1 摘要与 Twitter 的 Oauth 1.0a 不匹配
【发布时间】:2014-06-02 04:05:32
【问题描述】:

我正在尝试按照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

有什么我可能遗漏的明显内容吗?

【问题讨论】:

    标签: java android twitter twitter-oauth hmacsha1


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 2014-05-19
      • 2018-04-20
      相关资源
      最近更新 更多