我在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(...)' –