Как полностью декодировать строку base64 в php? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь реализовать API обновления Google Safebrowsing v4 на PHP.Но я не могу понять, как правильно декодировать rawHashes.

(rawHashes - это усеченные 4-байтовые хэши sha256, а затем конкатенированные).

Я пытаюсь использовать собственный base64_decode PHP, но не могу полностью декодировать строку, и я нене знаю, каким будет следующий шаг.

В соответствии с API документация вот как кодируются необработанные хэши:

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²"

Как видите, что-то не так, и я должен пропустить шаг, но я не могу понять, какой из них.

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Как сказал Mjh в обсуждении, нет ничего плохого в base64_decode, и больше ничего не нужно.

Все в порядке. Вы просто не читаете внимательно. Вот, прочитайте, что там написано: Хэши в двоичном формате Это говорит о двоичном формате. После декодирования вы получаете двоичное представление данных. Использование bin2hex должно вернуть читаемый человеком хэш. $ hash = bin2hex (base64_decode ($ your_encoded_hash)); - МДж

Декодированная строка выглядела странно, поскольку она представляет собой двоичные данные (необработанный хэш SHA256), хотя она полностью корректна. Чтобы получить хеши в более удобной кодировке, можно преобразовать двоичные данные в шестнадцатеричные данные с помощью функции php bin2hex

$hash = bin2hex(base64_decode($your_encoded_hash));
1 голос
/ 22 апреля 2019

Из того, что я знаю о base64_decode, он просто работает. Что-то должно быть не так в вашей строке $ rawHashes. Если в вашей строке есть разрывы строк, вам нужно избавиться от них, заменив их пустой строкой. Хеш, необходимый base64_decode, должен представлять собой одну длинную строку строки в кодировке base64. Нередко получается хэш, разбитый на несколько строк.

Попробуйте это ...

$decoded = base64_decode(str_replace(PHP_EOL, "", $rawHashes));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...