Строка Base64 может содержать вкладки?

Это базовая конкатенация строк в php

 echo "<li><a href='test'><span class='icon-plus'></span>"._('Test')."</a></li>";
6
задан Jason 12 November 2008 в 21:29
поделиться

9 ответов

Это зависит от того, что Вы спрашиваете. Если Вы спрашиваете, могут ли вкладки быть основными 64 закодированных, то ответ - "да", так как их можно рассматривать то же как любой другой символ ASCII.

Однако, если Вы спрашиваете, является ли основа, 64 вывода могут содержать вкладки, затем ответ, нет. Следующая ссылка для статьи, детализирующей основу 64, включая который символы считают допустимыми:

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

16
ответ дан 8 December 2019 в 02:53
поделиться

Короткий ответ нет - но Base64 не может содержать возвраты каретки также.

Именно поэтому, если у Вас есть несколько строк Base64, Вы разделяете любые возвраты каретки, переводы строки и что-либо еще, что не находится в алфавите Base64

Это включает вкладки.

9
ответ дан 8 December 2019 в 02:53
поделиться

Из wikipedia.com:

Текущая версия PEM (указанный в RFC 1421) использует алфавит с 64 символами, состоящий из верхних - и строчные символы Романского алфавита (A–Z, a–z), цифры (0-9), и "+" и "/" символы. "=" символ также используется в качестве специального суффиксного кода. Исходная спецификация, RFC 989, дополнительно используемый "*" символ для разграничивания закодированных но незашифрованных данных в потоке вывода.

Как Вы видите, символы табуляции не включены. Однако можно, конечно, закодировать символ табуляции в строку base64.

3
ответ дан 8 December 2019 в 02:53
поделиться

Конечно. Вкладка является просто символом ASCII 9, и это имеет base64 представление точно так же, как любое другое целое число.

2
ответ дан 8 December 2019 в 02:53
поделиться

Convert.FromBase64String() в.NET платформа, кажется, не возражает против них. Я полагаю, что весь пробел в строке проигнорирован.

string xxx = "ABCD\tDEFG";   //simulated Base64 encoded string w/added tab
Console.WriteLine(xxx);
byte[] xx = Convert.FromBase64String(xxx); // convert string back to binary
Console.WriteLine(BitConverter.ToString(xx));

вывод:

ABCD    DEFG
00-10-83-0C-41-46

Соответствующий пункт RFC 2045 (6:8)

Закодированный поток вывода должен быть представлен в строках не больше, чем 76 символов каждый. Все разрывы строки или другие символы, не найденные в Таблице 1, должны быть проигнорированы путем декодирования программного обеспечения. В base64 данных символы кроме тех, которые в Таблице 1, разрывах строки и другом пробеле, вероятно, указывают на ошибку передачи, о которой предупреждающее сообщение или даже отклонение сообщения могли бы быть соответствующими при некоторых обстоятельствах.

0
ответ дан 8 December 2019 в 02:53
поделиться

Ха-ха, как Вы видите от ответов, это - на самом деле не такое простое да никакой ответ.

Получающаяся строка Base64 после преобразования не может содержать символ табуляции, но мне кажется, что Вы не просите, чтобы, казался мне, что Вы спрашиваете, может Вы представлять строку (перед преобразованием) содержащий вкладку в Base64, и ответ на это - да.

Я добавил бы, хотя это действительно, что необходимо сделать, удостоверяются, что Вы заботитесь, чтобы сохранить кодирование Вашей строки, т.е. преобразовать его в массив байтов с Вашим корректным кодированием (Unicode, UTF-8 вообще) затем преобразовывают тот массив байтов к base64.

Править: Простой тест.

private void button2_Click(object sender, EventArgs e)
{
  StringBuilder sb = new StringBuilder();
  string test = "The rain in spain falls \t mainly on the plain";
  sb.AppendLine(test);
  UTF8Encoding enc = new UTF8Encoding();
  byte[] b = enc.GetBytes(test);
  string cvtd = Convert.ToBase64String(b);
  sb.AppendLine(cvtd);
  byte[] c = Convert.FromBase64String(cvtd);
  string backAgain = enc.GetString(c);
  sb.AppendLine(backAgain);
  MessageBox.Show(sb.ToString());
}
1
ответ дан 8 December 2019 в 02:53
поделиться

Спецификация Base64 (RFC 4648) указывает в Разделе 3.3, что любые символы неалфавита, с которыми встречаются, должны быть отклонены, если явно не позволено другой спецификацией:

Реализации ДОЛЖНЫ отклонить закодированные данные, если они содержат
символы вне основного алфавита при интерпретации закодированный основой
данные, если спецификация, обращающаяся к этому документу явно, не указывает иначе. Такие спецификации могут вместо этого указать, как MIME делает, что символы вне алфавита кодирования основы должны просто быть проигнорированы при интерпретации данных ("быть либеральным в том, что Вы принимаете"). Обратите внимание, что это означает, что любой смежный возврат каретки / символы (CRLF) перевода строки составляют "символы неалфавита" и проигнорированы.

Спецификации, такие как PEM (RFC 1421) и MIME (RFC 2045) указывают, что строки Base64 могут быть разбиты пробелами. На RFC 822, на который ссылаются вкладку (HTAB) считают пробельным символом.

Так, когда Base64 используется в контексте или MIME или PEM (и вероятно другие подобные спецификации), пробел, включая вкладки, должен быть обработан (разделенный) при декодировании закодированного содержания.

1
ответ дан 8 December 2019 в 02:53
поделиться

ДА!

Base64 используется для кодирования ЛЮБОГО значения на 8 битов (Десятичные от 0 до 255) в строку с помощью ряда безопасных символов. ВКЛАДКА десятичная 9.

Основывайте 64 использования один из следующих наборов символов:

Data: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
URLs: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_

Двоичные Вложения (например: электронная почта) в тексте также кодируются с помощью этой системы.

0
ответ дан 8 December 2019 в 02:53
поделиться

Кажется, что существует много беспорядка здесь; и удивительно большинство ответов имеет разнообразие "Нет". Я не думаю, что это - хороший канонический ответ. Причиной беспорядка является, вероятно, то, что Base64 строго не указан; существуют несколько практических реализаций и интерпретаций. Можно проверить текст ссылки для большего количества обсуждения этого.

В целом, однако, приспосабливание base64 кодеки ДОЛЖНО понять переводы строки, поскольку они получают мандат по некоторым base64 определениям (76 символьных сегментов, затем перевод строки и т.д.). Из-за этого большинство декодеров также допускает пробел добавления отступа и вполне обычно любой пробел между "триплетами" с 4 символами (так названный, так как они кодируют 3 байта).

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

Но я не добавил бы вкладки сам при генерации base64 содержания, отправленного сервису - быть консервативным в том, что Вы отправляете, (более) либеральный в том, что Вы получаете.

0
ответ дан 8 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: