我正在尝试在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..."
如您所见,有些事情是不正确的,我必须错过一个步骤,但我无法确定其中一个。
答案 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));