当前位置: 首页 > 面试题库 >

Java和PHP之间的Base64_encode不同

洪璞瑜
2023-03-14
问题内容

这是我的问题:

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



 类似资料:
  • 问题内容: 我正在使用一个加密系统,该系统会将数据传递给第三方应用程序。加密用Java完成,解密用PHP完成。尽管进行了几次尝试,但我无法获得PHP应用程序打开的加密字符串。 为了进行测试,我创建了一个PHP脚本,该脚本也对数据进行了加密,因此可以比较Java和PHP加密的字符串。结果匹配到第21个字符,然后有所不同。这就是我所拥有的: 和 显然,因为部分字符串匹配,所以正在正确地执行某些操作,但

  • 问题内容: 我一直在寻找在PHP服务器和Java客户端之间加密数据的方法。单独地,代码工作正常,我想在PHP服务器上坚持使用OpenSSL。 在尝试解码PHP加密字符串时遇到错误时,您是否看到了我所缺少的任何内容: PHP: PHP输出: 加密之前:Hello World !!! 在Base64之前:SGVsbG8gV29ybGQhISE = 加密镜头:44 加密的b64:U21yMVRGQTdR

  • 问题内容: 我正在尝试为某些python脚本构建Web界面。问题是我必须使用PHP(而不是CGI),并且我执行的某些脚本需要花费一些时间才能完成:5-10分钟。PHP是否可以与脚本进行通信并显示某种进度状态?这应该允许用户在任务运行时使用网页,并在此期间显示某些状态,或者在完成时仅显示一条消息。 当前使用exec()并在完成时处理输出。该服务器正在Windows计算机上运行,​​因此pcntl_f

  • 问题内容: PHP和Javascript有什么区别? 我知道一个是服务器端脚本,另一个是浏览器端。但是我要问的是,使用Javascript可以显示警报消息,我也可以简单地使用PHP来执行警报消息,而无需使用任何功能或使用if- else组合。 那么PHP和Javascript是排他性的吗,比如如果我使用一个,那么就不应该使用另一个,或者? 问题答案: 什么是differene黑白PHP和JavaS

  • 问题内容: 我正在编写一个PHP应用程序,我想确保它不会出现错误。 原始代码: 以下内容可以正常工作还是不建议使用? 有什么区别吗? 我再次查看了有关数据以及PHP.net中带有方括号的短数组方法,但不确定。 而且,简短的php标签是否适合回显?有版本问题吗?(提供在php.ini中启用) 问题答案: PHP> = 5.4支持以下功能: 这只是一个短语法,在 PHP <5.4中将不起作用。

  • 问题内容: 我对和感到困惑。我有两本PHP书。一个说它们是相同的,但是另一个说它们是不同的。我以为他们也一样。 他们不一样吗? 问题答案: 是按位与。请参见按位运算符。假设您这样做: 是逻辑AND。请参阅逻辑运算符。考虑一下这个真值表: