这是我的问题:
我有一个 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 之前,两个函数都有相同的结果。所以,对我来说,问题不在于密钥的生成,而在于编码。
有人能帮忙吗?
答案在 PHP 函数hash_hmac的文档中。
设置为 TRUE 时,输出原始二进制数据。FALSE 输出小写退出。
传递"true"作为最终参数。哈希是二进制的。将它们转换为字符串时,它们通常以十六进制编码。但在这种情况下,您将对其进行 base-64 编码,因此您需要原始二进制形式。