【问题标题】:Base64_encode different between Java and PHPJava和PHP之间的Base64_encode不同
【发布时间】:2013-12-28 15:33:22
【问题描述】:

这是我的问题:

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

有人可以帮忙吗?

【问题讨论】:

  • 有什么区别?
  • 您好.. 我认为您正在使用 woocommerce api。我也有同样的问题。用java连接api成功了吗?请帮助我收到签名不匹配错误

标签: java php encoding base64 hmac


【解决方案1】:

答案在 PHP 函数 hash_hmac 的 documentation 中。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2015-01-16
    • 2017-10-29
    • 1970-01-01
    • 2012-10-13
    相关资源
    最近更新 更多