Введение
Бинарная схема кодирования текста с использованием 32 символов. Base32 — это метод кодирования, основанный на системе счисления по основанию 32. Он использует алфавит из 32 символов, каждый из которых представляет собой уникальную комбинацию из 5 бит (2^5 = 32). Поскольку Base32 не получил широкого распространения, вопрос о нотации – какие символы использовать для представления 32 символов – не имеет столь четкого решения, как в случае более известных систем счисления (например, шестнадцатеричной), хотя существуют RFC и неофициальные, де-факто стандарты. Один из способов представления чисел Base32 в удобочитаемом виде – использование цифр от 0 до 9, за которыми следуют двадцать две заглавные буквы от A до V. Однако в различных контекстах используются и другие варианты. Исторически, код Бодо можно рассматривать как модифицированный (с состоянием) код Base32. В данной статье рассматривается использование Base32 для представления байтовых строк, а не беззнаковых целых чисел, подобно тому, как это работает в Base64.
Base32 is an encoding method based on the base 32 numeral system. It uses an alphabet of 32 digits, each of which represents a different combination of 5 bits (25). Since base32 is not very widely adopted, the question of notation—which characters to use to represent the 32 digits—is not as settled as in the case of more well known numeral systems (such as hexadecimal), though RFCs and unofficial and de facto standards exist. One way to represent Base32 numbers in human readable form is using digits 0–9 followed by the twenty two upper case letters A–V. However, many other variations are used in different contexts. Historically, Baudot code could be considered a modified (stateful) base32 code. This article focuses on the use of Base32 for representing byte strings rather than unsigned integer numbers, similar to the way Base64 works.
RFC 4648 кодировки
В октябре 2006 года был предложен проект интернет-стандарта, описывающего кодировки base16, base32 и base64. Он включает в себя две схемы для base32, но рекомендует использовать одну из них вместо другой. Более того, вне зависимости от предшествующих практик, в нем рекомендуется называть base32 только алфавит, определенный в разделе 6, а другой похожий алфавит из раздела 7 – base32hex. Не все согласны с этими рекомендациями. При использовании систем, именуемых base32, следует проявлять осторожность, так как эти системы могут быть base32 согласно RFC 4648 §6, или согласно §7 (возможно, игнорируя отмену RFC более простого названия для последней), или же представлять собой еще один вариант кодирования, о котором подробнее рассказано ниже.
Альтернативные схемы кодирования
Изменение алфавита Base32, во всех альтернативных стандартах используются схожие сочетания буквенно-цифровых символов.
Электрологика
Ранняя форма системы кодирования на основе 32 использовалась программистами, работавшими над Electrologica X1, для представления машинных адресов. "Разряды" представлялись десятичными числами от 0 до 31. Например, 12 16 представляло машинный адрес 400 (= 12 × 32 + 16).
Видеоигры
До того, как NVRAM стала повсеместной, несколько видеоигр для платформ Nintendo использовали систему счисления с основанием 31 для паролей. Эти системы исключали гласные буквы (за исключением Y), чтобы предотвратить случайное формирование нецензурного пароля в игре. Таким образом, символы обычно представляли собой незначительные вариации следующего набора: 0–9, B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Y, Z и некоторые знаки препинания. Среди игр, использующих такую систему, можно назвать Mario Is Missing!, Mario's Time Machine, Tetris Blast и The Lord of the Rings (Super NES).
Реализация программного обеспечения
Программы Base32 подходят для кодирования произвольных байтовых данных с использованием ограниченного набора символов, которые удобно использовать как людям, так и компьютерам. В реализациях Base32 применяется набор символов, состоящий как минимум из 32 различных символов (иногда добавляется 33-й символ для дополнения), а также алгоритм для кодирования произвольных последовательностей 8-битных байтов в алфавит Base32. Поскольку для представления каждого 8-битного входного байта требуется более одного 5-битного символа Base32, определяются требования к допустимой длине строк Base32 (которая должна быть кратна 40 битам, что обуславливает необходимость дополнения). В отличие от этого, тесно связанная система Base64 использует набор из 64 символов. Доступны реализации Base32 на языках C/C++, Perl, Java, JavaScript, Python, Go и Ruby.