Base64_encode在Java和PHP之间有所不同

时间:2012-06-12 18:28:37

标签: 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);
    String Signature = new String(Base64.encodeBase64(Hash));
    return Signature;
}

我的PHP功能:

function generateSignature() {
    $sequence = "hello";
    $encrypted = hash_hmac('sha256', $sequence, "SECRET_KEY");
    return base64_encode($encrypted);
}

两个函数的返回值不一样。我注意到在编码到base 64之前,两个函数都有相同的结果。所以,对我来说,问题不在于密钥的生成,而在于编码。

有人能帮忙吗?

1 个答案:

答案 0 :(得分:1)

答案在PHP函数hash_hmac的documentation中。

  

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

将“true”作为最终参数。哈希是二进制的。将它们转换为字符串时,它们通常以十六进制编码。但在这种情况下,你将使用base-64编码,所以你需要原始的二进制形式。