这是我的问题:
我有一个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编码,因此您需要原始二进制格式。