Java android端和php端的HmacSHA1结果不同

Java android端和php端的HmacSHA1结果不同,java,php,base64,hmac,Java,Php,Base64,Hmac,php代码: $secret = "mtHa5YRivVrQ/ZNtoe2oxg=="; $var3 = 11112222; $signature = hash_hmac('sha1', $var3, $secret, true); $data = base64_encode($signature); echo $data; 输出:Prpji0PmtBsmDo1grDbXMJnJUTs= Android代码: String data = 11112222; String secret = m

php代码:

$secret = "mtHa5YRivVrQ/ZNtoe2oxg==";
$var3 = 11112222;
$signature  = hash_hmac('sha1', $var3, $secret, true);
$data = base64_encode($signature);
echo $data;
输出:Prpji0PmtBsmDo1grDbXMJnJUTs=

Android代码:

String data = 11112222;
String secret = mtHa5YRivVrQ/ZNtoe2oxg==
SecretKeySpec key = new SecretKeySpec((secret).getBytes("UTF-8"), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(key);
byte[] bytes = mac.doFinal(data.getBytes("UTF-8"));
return new String(Base64.encodeToString(bytes, Base64.DEFAULT));
输出:q85cCMvVB7PX39upoT5/+9J0bWM=


不知道出了什么问题。请帮我解决一下

您对密钥Base64进行了编码,因此您必须首先将其解码为纯字节数组:

PHP:

爪哇:

结果:

LdKcsVyMX0BAhugGFEr4dAlFfe8=
String data = "11112222";
String secret64 = "mtHa5YRivVrQ/ZNtoe2oxg==";
byte[] secret = Base64.decode(secret64, Base64.DEFAULT);
SecretKeySpec key = new SecretKeySpec(secret, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(key);
byte[] bytes = mac.doFinal(data.getBytes("UTF-8"));
return Base64.encodeToString(bytes, Base64.DEFAULT);
LdKcsVyMX0BAhugGFEr4dAlFfe8=