0

我正在尝试使用 Android 上的 MAC 访问身份验证来签署 http 标头。我正在使用位于此处的 IETF 草案 #2:

https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-http-mac-02 (1)

使用草案的示例,变量是:

   MAC key identifier: h480djs93hd8
   MAC key: 489dks293j39
   MAC algorithm: hmac-sha-1
   Timestamp: 1336363200
   Nonce: dj83hs9s

以下是规范化的字符串:

 1336363200\n
 dj83hs9s\n
 GET\n
 /resource/1?b=1&a=2\n
 example.com\n
 80\n
 \n

我使用以下方法对mac头进行编码:

private String calculateMAC(final String macAlgorithm, final String normalizedString, final String keyString) {
    try {
        final SecretKeySpec keySpec = new SecretKeySpec((keyString).getBytes("UTF-8"), macAlgorithm);
        final Mac mac = Mac.getInstance(macAlgorithm);
        mac.init(keySpec);

        return Base64.encodeToString(mac.doFinal(normalizedString.getBytes("UTF-8")), Base64.NO_WRAP);
    } catch (final Exception e) {
        Log.e("Error", e.toString());
        return null;
    }
}

我遇到的问题是草案说生成的 MAC 是“ bhCQXTVyfj5cmA9uKkPFx1zeOXM=”。但无论我在尝试什么(不同的编码、不同的库等),我总是有“ 6T3zZzy2Emppni6bzL7kdRxUWL4=”。为什么??


(1)最新草案(https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-http-mac-03)没有例子。所以更难跟随。

4

1 回答 1

0

我在两个不同的平台(php 和 C#)上尝试了相同的示例,但该示例似乎不正确(毕竟是草稿)。正确的输出确实是“ 6T3zZzy2Emppni6bzL7kdRxUWL4=”。

其他人也看到了同样的问题

于 2013-03-28T15:32:49.863 回答