yEnc (yEnc)
yEnc — популярная схема кодирования двоичных файлов в текстовые, применяемая преимущественно пользователями Usenet. Также используется при отправке больших двоичных файлов по электронной почте. По сравнению с другими схемами кодирования двоичных данных в текстовые, более эффективна за счёт того, что использует не только символы из 7-битной таблицы ASCII, но и часть символов из расширенной таблицы ASCII. За счёт этого размер файлов, закодированных при помощи yEnc, превышает размер исходных всего на 1-2 %[1]. Это — существенное преимущество по сравнению с 33 %-40 % дополнительного объёма для шестибитных методов кодирования, таких как uuencode и Base64. Первая версия yEnc была выпущена Jürgen Helbing в начале 2001. К 2003 yEnc получил широкое распространение, став стал стандартом де-факто для кодирования двоичных файлов в Usenet'е.[2] Название yEncode — игра слов от «Why encode?» («Зачем кодировать?»), — шутка, возникшая в связи с тем, что основной идеей yEnc было то, что кодировать нужно только те символы двоичного файла, для которых это безоговорочно требовалось, чтобы поместить их в текст письма, соответствующий техническим стандартам RFC.[3]
Ещё одним достоинством yEnc по сравнению uuencode, Base64 и другими предшествующими техниками, является код CRC, позволяющий проверить, что исходный файл корректно собран и восстановлен из отдельных фрагментов, переданных по почте.
Как работает yEnc
[править | править код]В соответствии с RFC 822 и RFC 2822, сообщения электронной почты Usenet должны содержать только символы 7-битной кодовой таблицы ASCII. Однако на практике это ограничение давно не соблюдается и абсолютное большинство современного программного обеспечения штатно передаёт 8-битные символы в теле писем. С точки зрения yEnc из 256 возможных двоичных символов 252 могут быть переданы внутри письма в виде единичного байта, вне зависимости от того, отображается этот символ на экране компьютера или нет. Символы NUL, LF, CR, и = (знак равенства) кодируются специальным образом. Для LF и CR причина сделанного исключения состоит в том, что эти символы внутри письма, с точки зрения RFC, имеют специальный смысл. NUL — в связи со сложностями обработки строк, содержащих внутри себя этот символ в некоторых языках программирования и из соображений оптимизации алгоритмов обработки yEnc. Символ = используется в качестве Escape-символа.
Проблемы и критика
[править | править код]Ряд критиков указывал на слабые места yEnc.[4][5][6][7]
Они указывали, в частности, что yEnc страдает теми же изъянами более распространённого uuencode, которые давным-давно были решены в почтовом стандарте MIME. Например, yEnc требует, чтобы строки «=ybegin» и «=yend» были помещены в текст письма, ограничивая передаваемый в этом письме фрагмент двоичного файла.[3]
В результате этого возможно ложное срабатывание сборщика файлов, который будет анализировать текст письма и обнаружит там подобную строку, которая упомянута в процессе обсуждения самого yEnc в переписке. Это — небольшой недостаток, более серьёзным является то, что yEnc кодирует номера файлов в строке темы письма, которая является ненадёжным способом передачи информации и может быть искажена. В результате сборка двоичного файла произойдёт с ошибкой.
Критика так же касалась отсутствия формального стандарта, описывающего yEnc.
Среди предложений о доработке yEnc также звучала идея интегрировать уEnc в MIME, что, по всей видимости, избавило бы yEnc от большинства приписываемых этой технике кодирования недостатков. Однако, никаких практических шагов по реализации своих идей критики yEnc так и не предприняли, поэтому yEnc продолжает сейчас применяться в том виде, в каком он был определён автором технологии.
Стандартизация и поддержка в программном обеспечении
[править | править код]yEnc никогда не предлагался IETF в качестве технического стандарта. Домашняя страница yEnc содержит неформальную спецификацию технологии, а также ряд дополнительных технических замечаний.
yEnc напрямую поддерживается программой чтения новостей Usenet Forte Agent. Так же существует ряд утилит других производителей, которые позволяют использовать yEnc в сочетании с другими программами чтения почты и новостей.
Для программ Outlook Express, Windows Mail и Windows Live Mail существуют плагины независимых производителей, позволяющих использовать эту технологию. Mozilla Thunderbird поддерживает yEnc с ограничениями. Этот почтовый клиент не может раскодировать файлы, разбитые на несколько писем.[8]
Примечания
[править | править код]- ↑ Helbing, Juergen yEncode - A quick and dirty encoding for binaries (28 февраля 2002). Дата обращения: 26 июля 2014. Архивировано 28 августа 2013 года.
- ↑ Fellows, G. Newsgroups reborn – The binary posting renaissance (неопр.) // Digital Investigation. — 2006. — Т. 3, № 2. — С. 73—78. — ISSN 1742-2876. — doi:10.1016/j.diin.2006.04.006.
- ↑ 1 2 Kim, Juhoon; Schneider, Fabian; Ager, Bernhard; Feldmann, Anja. Today's Usenet Usage: NNTP Traffic Characterization (англ.) : journal. — 2010. — P. 1—6. — doi:10.1109/INFCOMW.2010.5466665.
- ↑ Helbing, Jürgen Opponents to yEnc . yenc.org (10 июня 2002). Архивировано 28 августа 2013 года.
- ↑ Nixon, Jeremy Why yEnc is bad for Usenet (17 марта 2002). Архивировано 29 августа 2013 года.
- ↑ Welch, Curt What's wrong with yEnc? (19 сентября 2002). Архивировано 11 августа 2013 года.
- ↑ Färber, Claus yEnc considered harmful (4 марта 2002). Архивировано из оригинала 1 июня 2009 года.
- ↑ "Yenc support in Thunderbird?". org.mozilla.lists.support-thunderbird (Mailing list). 2006-05-18. Архивировано 28 ноября 2016. Дата обращения: 10 апреля 2017.