import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Hex; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; public static Boolean verfiyPushMsg(String url, String requestBody, String partnerKey, String authorization) throws NoSuchAlgorithmException, UnsupportedEncodingException, java.security.InvalidKeyException { String baseStr = url + "|" + requestBody; Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); SecretKeySpec secret_key = new SecretKeySpec(partnerKey.getBytes("UTF-8"), "HmacSHA256"); sha256_HMAC.init(secret_key); //use in JAVA //String result = Hex.encodeHexString(sha256_HMAC.doFinal(baseStr.getBytes("UTF-8"))); //use in ANDROID 但是還未經測試 String result = new String(Hex.encodeHex(DigestUtils.md5(sha256_HMAC.doFinal(baseStr.getBytes("UTF-8"))))); return result.equals(authorization); } {"ordersn": "160726152598865", "shopid": 61299, "partner_id": 1, "timestamp": 1470198856} *** 附加在網路上搜尋方法,只是參考 在Android?目中使用到了org.apache.commons.codec.jar包下的Hex.encodeHexString(byte[] input)方法?行加密。?果??通?,?行??是?java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Hex.encodeHexString([B)Ljava/lang/String;??。 原因:Google Android?部也有一?包名一?的工程,而且?名也相同,??一?是?有?方法!于是?致包名?突,由于java的?用机制,系?先在自己的里面找到了同?名字的???,然后去?用系?自己??下面的那?方法。然而系?根本就?有那?方法,所以??。 解?方案:用eclipse把源代?下?下?,重新打包,修改原?的包名,然后重新引入到工程中即可。 或請工程師 指導更有效而完整的方法 目前我的程式碼依舊在 eclipse 環境下編譯 Android 4.4.2 Ver:19 JDK Compliance Ver:1.7