Может ли строка в кодировке base64 содержать пробелы? - PullRequest
26 голосов
/ 22 июня 2010

Может ли строка в кодировке base64 содержать пробелы?В частности, может ли он содержать пробелы в конце строки?

PS.Я думаю о целом "MySQL будет сокращать конечные пробелы при хранении строк в полях VARCHAR" здесь; -)

Ответы [ 6 ]

21 голосов
/ 22 июня 2010

Нет, не может.См. Base64 о допустимом хранилище символов, используемом base64, которые являются символами A-Z, a-z, 0-9, + и / (последние два могут отличаться в зависимости отреализации), а также символ заполнения = (но это также зависит от реализации, так как некоторые реализации вообще не используют заполнение).

13 голосов
/ 31 октября 2012

Не должно, но могло бы.

Допустимая строка base64 не должна содержать пробелов, поскольку алфавит кодирования должен состоять только из A-Z a-z 0-9 + /

Однако, если закодированные данные содержат символ «+» и данные передаются в URL-адресе, их можно непреднамеренно преобразовать в пробел. Таким образом, вы можете встретить предполагаемую строку base64, в которой, по-видимому, есть пробелы в этих обстоятельствах.

Если это так, просто замените пробелы на плюсы перед расшифровкой.

PS. Я думаю о целом "MySQL будет сокращать конечные пробелы при хранении строк в полях VARCHAR" здесь

Кроме того, завершающие пробелы в varchar не будут случайно удалены с MySQL 5.0.3

3 голосов
/ 22 июня 2010

Да. Строка в кодировке Base64 может содержать пробелы, но символы не имеют значения. Так что это нормально, если база данных урежет пробелы.

Фактически, оригинальная спецификация MIME рекомендует разбивать строки Base64 на строки по 72 символа. base64Binary of XML может также включать переводы строк, табуляции, пробелов.

В PHP base64_decode() удаляет все пробельные символы, так что вам не нужно об этом беспокоиться.

1 голос
/ 22 июня 2010

Википедия предполагает, что существует несколько вариантов кодировки Base64:

http://en.wikipedia.org/wiki/Base64

Так что ответ, вероятно, зависит от того, что вам нужно сделать со строкой.Но я бы осмелился сказать, что вы создали в PHP функцию base64_encode (), так что добавление пробелов представляется безопасным:

<?php

$original_data = 'Lorem ipsum dolor sit amet';
$encoded_data = base64_encode($original_data);
$padded_data = '    ' . chunk_split($encoded_data, 3, '  ') . '    ';

echo base64_decode($padded_data); // Prints 'Lorem ipsum dolor sit amet'

?>
0 голосов
/ 22 мая 2019

Нет, , но - некоторые реализации утилиты base64 будут добавлять разрывы строк в вывод, что может привести к тому, что пробел будет частью вывода.Если вы сталкиваетесь с этим делом, в зависимости от вашей версии base64, вы можете отключить это поведение или удалить символы новой строки, выполнив одно из следующих действий:

base64 -w 0 < input.txt
base64 < input | tr -d \\n

Посмотреть этот вопросдля более подробной информации: https://superuser.com/questions/1225134/why-does-the-base64-of-a-string-contain-n/1225334

0 голосов
/ 22 июня 2010

Насколько я знаю, это невозможно. По сути, строка Base64 должна быть построена из набора из 64 символов. A-Z, a-z, 0-9 составляют 62 - два других зависят от реализации.

Исходя из того, что я знаю, теперь есть реализация, которая будет использовать пробел в качестве символа. Основной причиной этого является удобочитаемость - то есть строка Base64 должна быть легко распечатана и распознана.

Вы, вероятно, найдете больше информации об этом в Википедии .

...