我在android上遇到了一些HMAC问题。我正在使用以下代码在搜索android hmac-sha1时出现在网络上的SHA1算法。与标准Java 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());
}
为了测试此代码我创建了它一个简单的标准的Java程序(更换Log.v与课程的System.out.println电话通话中),所以我可以比较与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程序相混淆。
任何帮助表示赞赏!
找不到方法'android.util.Base64.encodeBase64String(...)' –