如何在php中完全解码base64字符串?

时间:2019-04-22 14:28:32

标签: php base64

我正在尝试在PHP中实现Google Safebrowsing更新API v4。 但是我不知道如何正确解码rawHashes。

(rawHash是4字节截断的sha256散列,然后进行串联)。

我正在尝试PHP的本机base64_decode,但无法完全解码该字符串,也不知道下一步是什么。

根据API documentation,以下是对原始哈希进行编码的方式:

withPivot('weed_id','weed_state_id','photos')

我非常有把握地解码字符串,如下所示:

string (bytes format)
The hashes, in binary format, concatenated into one long string. Hashes are sorted in lexicographic order. For JSON API users, hashes are base64-encoded.
A base64-encoded string.

base64编码的字符串如下所示:

$decoded = base64_decode($rawHashes);

base64解码的字符串如下所示:

"AAAIYAAAC90AABOxAAAjDgAALZIAAEbKAABIHwAA..."

如您所见,有些事情是不正确的,我必须错过一个步骤,但我无法确定其中一个。

2 个答案:

答案 0 :(得分:1)

据我所知,base64_decode可以正常工作。 $ rawHashes字符串中一定有问题。如果字符串中有换行符,则需要用空字符串替换掉它们。 base64_decode需要的哈希应该是base64编码字符串的一长行。收到散列为多行的哈希并不少见。

尝试一下...

$decoded = base64_decode(str_replace(PHP_EOL, "", $rawHashes));

答案 1 :(得分:1)

就像Mjh在讨论中所说的那样,base64_decode没错,也不需要其他任何东西。

  

没事。您只是没有仔细阅读。在这里,阅读其内容:散列,二进制格式。它说二进制格式。解码后,您得到了数据的二进制表示形式。使用bin2hex应该返回人类可读的哈希。 $ hash = bin2hex(base64_decode($ your_encoded_hash)); -Mjh

虽然完全正确,但解码后的字符串看起来很奇怪,因为它是二进制数据(原始SHA256哈希)。为了以更方便的编码获取哈希,可以使用php函数bin2hex

将二进制表示的数据转换为十六进制表示的数据。
$hash = bin2hex(base64_decode($your_encoded_hash));