小编nlb*_*ers的帖子

Android HMAC-SHA1与标准Java HMAC-SHA1不同

我在android上遇到了一些HMAC的问题.我正在使用SHA1算法,以下代码在搜索android hmac-sha1时显示在整个网络上.

        String base_string = "This is a test string";
        String key = "testKey";
        try {
            Mac mac = Mac.getInstance("HmacSHA1");
            SecretKeySpec secret = new SecretKeySpec(key.getBytes("UTF-8"), mac.getAlgorithm());
            mac.init(secret);
            byte[] digest = mac.doFinal(base_string.getBytes());

            String enc = new String(digest);

            // Base 64 Encode the results
            String retVal = Base64.encodeBase64String(enc.getBytes());
            Log.v(TAG, "String: " + base_string);
            Log.v(TAG, "key: " + key);
            Log.v(TAG, "result: " + retVal);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
Run Code Online (Sandbox Code Playgroud)

为了测试这段代码我用它创建了一个简单的标准Java程序(当然用System.out.println调用替换Log.v调用)所以我可以比较android版本.在这两个实例中,我对base_string和key使用相同的测试值.

此外,我已经使用一些PHP函数和验证服务器(使用一些OAuth令牌)验证了标准Java的编码结果.代码在标准Java程序中运行良好,但它在Android程序中不起作用.我做了很多搜索,无法弄清楚出了什么问题.有没有人经历过这个?

以下是标准java和android的结果......

  • Java(和PHP): fH/+pz0J5XcPZH/d608zGSn7FKA=
  • Android程序: fH/vv73vv709Ce+/vXcPZH/vv73vv71PMxkp77+9FO+/vQ==

进一步研究一下,我确信它是hmac函数,而不是Base64编码,因为比较那些hmac值,Android版本有各种额外的空格和其他未知字符符号与Java程序相混淆.

任何帮助表示赞赏!

java android sha1 hmac

6
推荐指数
1
解决办法
8861
查看次数

标签 统计

android ×1

hmac ×1

java ×1

sha1 ×1