Base64_编码在Java和PHP之间不同

Base64_编码在Java和PHP之间不同,java,php,encoding,base64,hmac,Java,Php,Encoding,Base64,Hmac,我的问题是: 我有一个JAVA函数来生成加密字符串。我必须用PHP做同样的事情 我的Java函数: String generateSignature () { byte[] Sequence = ("hello").getBytes("UTF-8"); Mac HMAC = Mac.getInstance("HMACSHA256"); HMAC.init("SECRET_KEY"); byte[] Hash = HMAC.doFinal(Sequence);

我的问题是:

我有一个JAVA函数来生成加密字符串。我必须用PHP做同样的事情

我的Java函数:

String generateSignature () {
    byte[] Sequence = ("hello").getBytes("UTF-8");
    Mac HMAC = Mac.getInstance("HMACSHA256");
    HMAC.init("SECRET_KEY");
    byte[] Hash = HMAC.doFinal(Sequence);
    String Signature = new String(Base64.encodeBase64(Hash));
    return Signature;
}
function generateSignature() {
    $sequence = "hello";
    $encrypted = hash_hmac('sha256', $sequence, "SECRET_KEY");
    return base64_encode($encrypted);
}
我的PHP函数:

String generateSignature () {
    byte[] Sequence = ("hello").getBytes("UTF-8");
    Mac HMAC = Mac.getInstance("HMACSHA256");
    HMAC.init("SECRET_KEY");
    byte[] Hash = HMAC.doFinal(Sequence);
    String Signature = new String(Base64.encodeBase64(Hash));
    return Signature;
}
function generateSignature() {
    $sequence = "hello";
    $encrypted = hash_hmac('sha256', $sequence, "SECRET_KEY");
    return base64_encode($encrypted);
}
这两个函数的返回值不同。我注意到的是,在编码到base 64之前,两个函数都有相同的结果。因此,对我来说,问题不在于密钥的生成,而在于编码

有人能帮忙吗?

答案在PHP函数hash_hmac的列表中

设置为TRUE时,输出原始二进制数据。FALSE输出小写十六进制


传递“true”作为最终参数。散列是二进制的。当将它们转换为字符串时,它们通常用十六进制编码。但在本例中,您将对其进行base-64编码,因此需要原始二进制形式。

有什么区别?您好。。我想你是在和woocommerce合作。我也有同样的问题。您是否成功地使用java连接到API。?请帮助我,我收到签名不匹配错误