Может ли закодированная строка base64 содержать пробелы?

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

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

Ответ 1

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

Ответ 2

Это не должно, но это может сделать.

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

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

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

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

Как и в стороне, конечные пробелы varchar не будут случайно удалены с MySQL 5.0.3

Ответ 3

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

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

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

Ответ 4

Википедия предполагает, что существуют различные варианты кодировки 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'

?>

Ответ 5

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

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

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

Ответ 6

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

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

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