Java和PHP之间的Base64_encode不同

问题描述

答案在PHP函数hash_hmac 的文档中。

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

传递“ true”作为最终参数。哈希是二进制的。将它们转换为字符串时,通常以十六进制编码。但是在这种情况下,您将对它进行base-64编码,因此您需要原始二进制格式。

解决方法

这是我的问题:

我有一个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之前,两个函数的结果相同。因此,对我而言,问题不在于密钥的生成,而在于编码。

有人能帮忙吗?

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”