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

问题描述 投票:0回答:2

我正在尝试在PHP中实施Google Safebrowsing update API v4。但我无法想象如何正确解码rawHashes。

(rawHashes是4字节截断的sha256哈希,然后连接)。

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

根据API documentation这里是如何编码rawhashes:

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.

我非常简单地解码字符串,如下所示:

$decoded = base64_decode($rawHashes);

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

"AAAIYAAAC90AABOxAAAjDgAALZIAAEbKAABIHwAA..."

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

b"\x00\x00\x08`\x00\x00\vÝ\x00\x00\x13±\x00\x00#\x0E\x00\x00-’\x00\x00FÊ\x00\x00H\x1F\x00\x00^\x06\x00\x00bF\x00\x00h²"

你可以看到一些事情是不对的,我必须错过一步,但我无法想象一个。

php base64
2个回答
1
投票

根据我所知的base64_decode,它只是起作用。 $ rawHashes字符串中的某些内容必定是错误的。如果您的字符串中有换行符,则需要通过用空字符串替换它们来消除它们。 base64_decode需要的哈希值应该是base64编码字符串的一长行。接收分为多行的哈希并不罕见。

试试这个 ...

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

1
投票

正如Mjh在讨论中所说,base64_decode没有任何问题,也没有其他需要。

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

解码后的字符串看起来很奇怪,因为它是二进制数据(Raw SHA256 hash),尽管它完全正确。为了以更方便的编码获得散列,可以使用php函数bin2hex将二进制表示的数据转换为十六进制表示的数据

$hash = bin2hex(base64_decode($your_encoded_hash));
© www.soinside.com 2019 - 2024. All rights reserved.