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]

Примечания

[править | править код]
  1. Helbing, Juergen yEncode - A quick and dirty encoding for binaries (28 февраля 2002). Дата обращения: 26 июля 2014. Архивировано 28 августа 2013 года.
  2. 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.
  3. 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.
  4. Helbing, Jürgen Opponents to yEnc. yenc.org (10 июня 2002). Архивировано 28 августа 2013 года.
  5. Nixon, Jeremy Why yEnc is bad for Usenet (17 марта 2002). Архивировано 29 августа 2013 года.
  6. Welch, Curt What's wrong with yEnc? (19 сентября 2002). Архивировано 11 августа 2013 года.
  7. Färber, Claus yEnc considered harmful (4 марта 2002). Архивировано из оригинала 1 июня 2009 года.
  8. "Yenc support in Thunderbird?". org.mozilla.lists.support-thunderbird (Mailing list). 2006-05-18. Архивировано 28 ноября 2016. Дата обращения: 10 апреля 2017.