Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

base64 в почте   Найти похожие ветки 

 
grisme ©   (2006-10-08 09:45) [0]

как известно, контент писем кодируется base64. :) При кодировании берутся группы по 3 байта и на выходе одной группы - 4 байта, соответственно, а если размер наполнения не кратен 3? какие байты дописываются до кратности?


 
IMHO ©   (2006-10-08 09:49) [1]


> grisme ©   (08.10.06 09:45)
>
> как известно, контент писем кодируется base64.


Как известно, кодировки контента писем могут быть: 7Bit, 8Bit, Base64, Binary, BinHex, Quoted, UUEncode (может, что-то еще упустил)


 
grisme ©   (2006-10-08 09:53) [2]

вопрос именно по base64 :)


 
Чапаев ©   (2006-10-08 10:21) [3]

Выдрано из FAQ DelphiWorld.

Как известно, байт состоит из восьми битов :)
В один байт можно вложить 256 цифр, от 0 до 255. Однако, если вместо восьми байт использовать только шесть, то объем вложенной информации уменьшается до 64 цифр, от 0 до 63. Теперь главное: любую цифру 6-ти битового байта можно представить в виде печатного символа. 64 символа это не так много, us-ascii символов вполне хватит. Ниже представлен 64-х символьный base64 "алфавит".
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
где код символа A - 0, а код символа / - 63. Вроде, понятно. Что дальше?
А далее берутся три последовательных байта по восемь бит (всего 24 бита), и побитно делятся на четыре 6-ти битных байта (всего 24 бита). Немного странно звучит: "шестибитный байт". На самом деле бит восемь, однако используются только 6 младших бит, два старших бита игнорируются. Схематично такое "деление три к четырем" можно представить себе так:

В приведенном примере три числа 103, 193 и 58 были закодированы в base64 формат. В результате мы получили 4-х символьный стринг Z8E6. Т.о. на практике увидели идеологию перевода двоичной информации в текст по принципу 3 к 4.
Основываясь на этом принципе, мы можем закодировать любую двоичную информацию в текст, причем не очень сильно увеличивая ее объем (на 30%). Затем наша информация через почтовый сервер попадет к нужному адресату, почтовик которого декодирует текст в двоичный файл.
Все довольны, все смеются.
"Но..", скажите Вы, - "что делать, если у нас нет трех байтов? Есть только один или два!" В этом случае в конец четырех символьного стринга добавляется символ = (равно). Если не хватает (до трех) одного байта, то добавляется один символ "равно":
Z8E=
если не хватает двух байт, то добавляются два символа "равно":
Z8==
Что радует: с символами "равно" надо разбираться только один раз - при чтении конца файла. На этом вроде бы все... Нет, еще не все. Формат base64 имеет ограничение - общая длина строки, состоящая из 4-х символьных стрингов составляет 72 символа (за исключением самой последней строки - там уже сколько получится).


 
grisme ©   (2006-10-08 10:26) [4]

Чапаев, спасибо :) подтвердил информацию, найдя в RFC 2045.
низкий поклон :)


 
Percent   (2006-10-08 10:30) [5]

Формат base64 имеет ограничение - общая длина строки, состоящая из 4-х символьных стрингов составляет 72 символа (за исключением самой последней строки - там уже сколько получится).

Где траву такую забористую берут?

2 grisme ©

См. тут: http://cc.borland.com/Item.aspx?id=21951


 
Percent   (2006-10-08 10:32) [6]

подтвердил информацию, найдя в RFC 2045.

Уникально... RFC под рукой, а он на форуме спрашивает...


 
grisme ©   (2006-10-08 10:34) [7]

RFC под рукой оказался примерно параллельно с временем ответа Чапаева :)
ну, уж не сердчайте..:)


 
Percent   (2006-10-08 10:41) [8]

RFC под рукой оказался

Ну хоть адрес-то записал, где эти RFC складируются?...


 
grisme ©   (2006-10-08 10:49) [9]

http://www.faqs.org/rfcs/rfc2045

путешествуй там :)


 
Чапаев ©   (2006-10-08 10:49) [10]

> [5] Percent   (08.10.06 10:30)

А какие претензии? "Поток" данных в base64 разбивается на строки в 72 символа длиной.


 
grisme ©   (2006-10-08 10:50) [11]

Чапаев ©   (08.10.06 10:49) [10]
Щаз он до RFC доберется - тоже просвятится ;)


 
grisme ©   (2006-10-08 10:52) [12]

эта, убери из ссылки rfc2045 :) курить мне меньше нада


 
Percent   (2006-10-08 11:04) [13]

grisme ©   (08.10.06 10:49) [9]
http://www.faqs.org/rfcs/rfc2045

путешествуй там :)


Мне не надо. Я тебе рекомендовал ссылку сохранить...

"Поток" данных в base64 разбивается на строки в 72 символа длиной.

Это относится к MIME.
Но никоим образом не к BASE64.
Да и не 72, а 76 символов (если уже про MIME говорить).

Щаз он до RFC доберется - тоже просвятится ;)

Спасибо, я уже читал. Давно. На память не жалуюсь.


 
Чапаев ©   (2006-10-08 11:11) [14]

> [13] Percent   (08.10.06 11:04)

Хотя вообще да... base64 -- только способ кодирования...


 
grisme ©   (2006-10-08 11:19) [15]

Percent   (08.10.06 11:04) [13]
извиняюсь, не так понял :)


 
Anatoly Podgoretsky ©   (2006-10-08 13:36) [16]

С кодированием, а конкретно с количеством символов в последней строке полный бардак.


 
Kolan ©   (2006-10-08 13:44) [17]


> grisme ©   (08.10.06 09:45)

нули

Есть же наверняка описание...


 
Anatoly Podgoretsky ©   (2006-10-08 13:48) [18]

Kolan ©   (08.10.06 13:44) [17]
Такую систему в помойку.
Система на выходе должна выдавать ту же последовательность, что и на входе, без всяких нулей.

А то что бардак, подверждает такой популярный почтальнон как The Bat!
Он не выполняет не то, что правило 72/76/80, но и правило четырех.


 
Чапаев ©   (2006-10-08 14:40) [19]

> А то что бардак, подверждает такой популярный почтальнон
> как The Bat!

Хе... Помнится, раз это чудо закинуло в base64 русскоязычное имя вложения. А расширение в соответствии с какой-то прихотью перенесло на следующую строку. В итоге Бат у получателя отказался такое вложение читать. Пришлось вручную eml править.


 
Anatoly Podgoretsky ©   (2006-10-08 14:43) [20]

Это другая ошибка, которая доказывает, что с Base64 надо работать осторожно. У них вообще количество глюков на мегабайт программы резко превосходит средний уровень.


 
фри   (2006-10-10 21:17) [21]

а естьли у вас реализация base64 на С++ или PHP



Страницы: 1 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.038 c
2-1160395203
mahab
2006-10-09 16:00
2006.10.29
WM_VSCROLL


2-1160679520
dreamse
2006-10-12 22:58
2006.10.29
Проблема при перезагрузке


15-1159942976
PHPcoder
2006-10-04 10:22
2006.10.29
Отловить вращение колесика.


2-1160928485
learner
2006-10-15 20:08
2006.10.29
Количество файлов в дректории.


4-1150282634
SamProf
2006-06-14 14:57
2006.10.29
Как создать виртуальнкю файловую систему