【发布时间】:2011-10-26 05:23:12
【问题描述】:
我在 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());
}
为了测试这段代码,我用它创建了一个简单的标准 Java 程序(当然,将 Log.v 调用替换为 System.out.println 调用),这样我就可以与 android 版本进行比较。在这两种情况下,我都对 base_string 和 key 使用相同的测试值。
此外,我还使用一些 PHP 函数和验证服务器(使用一些 OAuth 令牌)验证了标准 Java 的编码结果。该代码在标准 Java 程序中运行良好,但在 Android 程序中无法运行。我做了很多搜索,无法弄清楚什么是错的。有人经历过吗?
以下是标准 java 和 android 的结果...
- Java(和 PHP):
fH/+pz0J5XcPZH/d608zGSn7FKA= - 安卓程序:
fH/vv73vv709Ce+/vXcPZH/vv73vv71PMxkp77+9FO+/vQ==
再深入研究一下,我确定这是 hmac 函数,而不是 Base64 编码,因为比较那些 hmac 值,Android 版本与 Java 相比,有各种额外的空格和其他未知字符符号。程序。
感谢任何帮助!
【问题讨论】:
-
找不到方法
android.util.Base64.encodeBase64String(...)