Java等价的PHP代码返回不同的Base64编码结果
Java代码Java等价的PHP代码返回不同的Base64编码结果,java,php,base64,Java,Php,Base64,Java代码 completeStrBytes = new byte[2]; completeStrBytes[0] = (byte)(signatureLength>>>8); //signatureLength = 128 completeStrBytes[1] = (byte)signatureLength; System.out.println(Base64.getEncoder().encodeToString(completeStrBytes)); 输出:友邦保险
completeStrBytes = new byte[2];
completeStrBytes[0] = (byte)(signatureLength>>>8); //signatureLength = 128
completeStrBytes[1] = (byte)signatureLength;
System.out.println(Base64.getEncoder().encodeToString(completeStrBytes));
输出:友邦保险=
PHP代码
$firstPart = $signatureLength >> 8;
$secondPart = $signatureLength;
var_dump(base64_encode($firstPart . $secondPart));
输出:字符串(8)“MDEyOA=”
我理解PHP字符串已经被视为字节字符串
我可以知道如何在PHP中获得java等效代码吗?PHP代码中有什么错误
提前感谢。如果您正在为2字节数组计算base64,请参见
{0x00,0x80}
。在php的情况下,您的计算基数为4个字符的字符串“0128”
(将两个数字串接为字符串时得到)
您可能想首先:
UPD
您可能还希望使用函数将不同的数据类型转换为字符串:
<?php
$signatureLength = 128;
var_dump(base64_encode(pack('n', $signatureLength))); // string(4) "AIA="
注意,还有一个base64url
编码,它不是PHP中的base64\u encode()
例如,当您使用PHPbase64\u encode()
进行JWT编码/解码时,您会遇到麻烦
因此,对于您的情况,请尝试
var_dump(base64url_encode($firstPart . $secondPart));
@Rajesh这就是为什么我提供了这些功能。没有。
var_dump(base64url_encode($firstPart . $secondPart));
function base64url_encode($data)
{
$b64 = base64_encode($data);
if ($b64 === false) {
return false;
}
$url = strtr($b64, '+/', '-_');
return rtrim($url, '=');
}
function base64url_decode($data, $strict = false)
{
$b64 = strtr($data, '-_', '+/');
return base64_decode($b64, $strict);
}