Base32 - Base32

Base32 - это система счисления с основанием -32 . Он использует набор из 32 цифр , каждая из которых может быть представлена ​​5 битами (2 5 ). Один из способов представления чисел Base32 в удобочитаемом виде - использование стандартного набора из 32 символов, например, двадцати двух заглавных букв A – V и цифр 0–9. Однако многие другие варианты используются в разных контекстах.

Это пример числа Base32, представленного с использованием ранее описанного набора из 32 символов ( IPFS CIDv1 в кодировке верхнего регистра Base32):BAFYBEICZSSCDSBS7FFQZ55ASQDF3SMV6KLCW3GOFSZVWLYARCI47BGF354

Преимущества

Base32 имеет ряд преимуществ перед Base64 :

  1. Результирующий набор символов - это все в одном регистре, что часто может быть полезно при использовании файловой системы без учета регистра , имен DNS , разговорного языка или человеческой памяти.
  2. Результат можно использовать как имя файла, потому что он не может содержать символ '/', который является разделителем пути Unix .
  3. Алфавит можно выбрать так, чтобы пары разных символов не выглядели одинаково, поэтому строки можно точно расшифровать вручную. (Например, в наборе символов RFC  4648 отсутствуют цифры для единицы, восьми и нуля, поскольку их можно спутать с буквами «I», «B» и «O».)
  4. Результат без заполнения может быть включен в URL без кодирования каких-либо символов.

Base32 также имеет преимущества перед шестнадцатеричным / Base16 :

  1. Представление Base32 занимает примерно на 20% меньше места. (1000 бит занимает 200 символов по сравнению с 250 для Base16).

Недостатки

Представление Base32 занимает примерно на 20% больше места, чем Base64 . Кроме того, поскольку он кодирует от 5 байтов до 8 символов (а не от 3 байтов до 4 символов), заполнение до 8-символьной границы создает большую нагрузку на короткие сообщения.

Длина обозначений Base64 и Base32 в процентах от двоичных данных
Base64 Base32
8-битный 133% 160%
7-битный 117% 140%

RFC 4648 алфавит Base32

Наиболее широко используемый алфавит Base32 определен в RFC  4648 . Он использует алфавит из A - Z , а затем 2 - 7 . 0 и 1 пропускаются из-за их сходства с буквами O и I (таким образом, «2» фактически имеет десятичное значение 26 ).

В некоторых случаях заполнение не требуется или не используется (заполнение можно определить по длине строки по модулю 8). RFC 4648 утверждает, что необходимо использовать заполнение, если в спецификации стандарта, ссылающейся на RFC, явно не указано иное. Исключение заполнения полезно при использовании данных в кодировке base32 в токенах URL или именах файлов, где символ заполнения может представлять проблему.

RFC 4648 Base 32 алфавит
Ценить Условное обозначение Ценить Условное обозначение Ценить Условное обозначение Ценить Условное обозначение
0 А 8 я 16 Q 24 Y
1 B 9 J 17 р 25 Z
2 C 10 K 18 S 26 2
3 D 11 L 19 Т 27 3
4 E 12 M 20 U 28 год 4
5 F 13 N 21 год V 29 5
6 грамм 14 О 22 W 30 6
7 ЧАС 15 п 23 Икс 31 год 7
набивка знак равно

Альтернативные версии

При изменении алфавита Base32 все альтернативные стандарты имеют аналогичные комбинации буквенно-цифровых символов.

z-base-32

z-base-32 - это кодировка Base32, разработанная Зуко Уилкокс-О'Хирном для упрощения использования человеком и большей компактности. Он включает 1 , 8 и 9, но исключает l , v и 2 . Он также переставляет алфавит, чтобы более простые символы встречались чаще. Он компактно кодирует битовые строки, длина которых в битах не кратна 8, и пропускает завершающие символы заполнения. г-основание 32 было использовано в Mnet проекте с открытым исходным кодом, и в настоящее время используется в Фил Zimmermann «ы ZRTP протокола, а также в Тахо-LAFS проекте с открытым исходным кодом.

z-base-32 алфавит
Ценить Условное обозначение Ценить Условное обозначение Ценить Условное обозначение Ценить Условное обозначение
0 у 8 е 16 о 24 а
1 б 9 j 17 т 25 3
2 п 10 k 18 1 26 4
3 d 11 м 19 ты 27 5
4 р 12 c 20 ш 28 год час
5 ж 13 п 21 год я 29 7
6 грамм 14 q 22 s 30 6
7 8 15 Икс 23 z 31 год 9

База Крокфорда32

Другой альтернативный дизайн для Base32 создан Дугласом Крокфордом , который предлагает использовать дополнительные символы для контрольной суммы mod-37. Он исключает буквы I, L и O, чтобы не путать их с цифрами. Также исключается буква U, чтобы уменьшить вероятность случайной непристойности.

Библиотеки для кодирования двоичных данных в Crockford's Base32 доступны на разных языках.

Алфавит Крокфорда Base32
Ценить Кодировать цифру Расшифровать цифру Ценить Кодировать цифру Расшифровать цифру
0 0 0 o O 16 грамм г G
1 1 1 я л л 17 ЧАС h H
2 2 2 18 J j J
3 3 3 19 K k K
4 4 4 20 M м М
5 5 5 21 год N п N
6 6 6 22 п p P
7 7 7 23 Q q Q
8 8 8 24 р г R
9 9 9 25 S SS
10 А а А 26 Т т т
11 B б В 27 V v V
12 C в C 28 год W w W
13 D d D 29 Икс х х
14 E e E 30 Y y Y
15 F f F 31 год Z z Z

Electrologica

Более ранняя форма записи с основанием 32 использовалась программистами, работающими над Electrologica X1, для представления машинных адресов. «Цифры» были представлены как десятичные числа от 0 до 31. Например, 12–16 будет представлять машинный адрес 400 (= 12 * 32 + 16).

base32hex

Triacontakaidecimal - это еще одна альтернативная конструкция для Base 32, которая расширяет шестнадцатеричные числа более естественным образом и была впервые предложена Кристианом Ланкто, программистом, работающим в Sage Software , в письме в журнал доктора Добба в марте 1999 года в качестве предлагаемого решения для решения проблемы. Ошибка 2000 года, называемая «двойным шестигранником». Эта версия была описана в RFC  2938 под названием «Base-32». RFC 4648, признавая существующее использование этой версии в NSEC3 , называет ее base32hex и не рекомендует маркировать ее как base32.

Как и в шестнадцатеричном формате, используются цифры от 0 до 9, за которыми следуют буквы алфавита. Это соответствует цифрам, используемым функцией JavaScript parseInt() и конструктором Python, int() когда указана база больше 10 (например, 16 или 32). Он также сохраняет свойство шестнадцатеричного числа сохранять порядок побитовой сортировки представленных данных, в отличие от RFC 4648 base-32 или base-64.

В отличие от многих других систем обозначений с основанием 32, триаконтакадесимальный является непрерывным и включает символы, которые могут визуально противоречить друг другу. С правильным шрифтом можно визуально различать 0, O и 1, I. Другие шрифты не подходят, потому что контекст, который обычно предоставляет английский, не обеспечивается системой обозначений, которая выражает числа. Однако выбор шрифта не контролируется нотацией или кодировкой, поэтому рискованно предполагать, что будет использоваться различимый шрифт.

Алфавит с основанием 32 "Extended Hex"
Ценить Условное обозначение Ценить Условное обозначение Ценить Условное обозначение Ценить Условное обозначение
0 0 9 9 18 я 27 р
1 1 10 А 19 J 28 год S
2 2 11 B 20 K 29 Т
3 3 12 C 21 год L 30 U
4 4 13 D 22 M 31 год V
5 5 14 E 23 N
6 6 15 F 24 О
7 7 16 грамм 25 п
8 8 17 ЧАС 26 Q подушечка знак равно

Geohash

См. Алгоритм Geohash , используемый для представления значений широты и долготы одним положительным целым числом (с чередованием битов). В представлении Geohash в формате base32 используются все десятичные цифры (0-9) и почти весь алфавит в нижнем регистре, кроме букв «a», «i», «l», «o», как показано на следующей карте символов:

Десятичный 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
База 32 0 1 2 3 4 5 6 7 8 9 б c d е ж грамм
 
Десятичный 16 17 18 19 20 21 год 22 23 24 25 26 27 28 год 29 30 31 год
База 32 час j k м п п q р s т ты v ш Икс у z

Видеоигры

До того, как 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! , «Машина времени Марио» , « Tetris Blast» и «Властелин колец» (Super NES) .

Надежный алфавит

Безопасный по словам алфавит Base32 является расширением алфавита Open Location Code Base20 . В этом алфавите используются 8 цифровых цифр и 12 буквенных цифр без учета регистра, выбранных во избежание случайного образования слов. Если рассматривать алфавит как чувствительный к регистру, получается набор из 32 (8 + 12 + 12) цифр.

Десятичный 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
База 32 2 3 4 5 6 7 8 9 C F грамм ЧАС J M п Q
 
Десятичный 16 17 18 19 20 21 год 22 23 24 25 26 27 28 год 29 30 31 год
База 32 р V W Икс c ж грамм час j м п q р v ш Икс

Программное обеспечение

Base32 - это нотация для кодирования произвольных байтовых данных с использованием ограниченного набора символов, которые могут удобно использоваться людьми и обрабатываться компьютерами.

Base32 состоит из набора символов, состоящего из 32 различных символов, а также алгоритма кодирования произвольных последовательностей 8-битных байтов в алфавит Base32. Поскольку для представления каждого 8-битного входного байта требуется более одного 5-битного символа Base32, он также определяет требования к допустимой длине строк Base32 (которые должны быть кратны 40 битам). Напротив, тесно связанная система Base64 использует набор из 64 символов.

Доступны реализации Base32 на C / C ++, Perl, Java, JavaScript, Python, Go и Ruby.

Смотрите также

Основания, относящиеся к "Полномочиям 2":      Другие базы:      Приложения base32:

использованная литература

  1. ^ O'Whielacronx, Zooko (2009). «Человеко-ориентированное кодирование base-32» .
  2. ^ Дуглас Крокфорд. «База 32» . Архивировано из оригинала на 2002-12-23.
  3. ^ Ланкто, Кристиан (1999-03-01). «Лучшее свидание? (Вторая буква под заголовком) - Письма» . Доктора Добба .
  4. ^ "parseInt () - JavaScript" . Веб-документы MDN . Mozilla.
  5. ^ «Встроенные функции» . Документация Python . Фонд программного обеспечения Python. Архивировано из оригинала на 2018-10-26 . Проверено 9 августа 2017 .
  6. ^ Йозефссон, Саймон (2006). «7. Кодирование Base 32 с расширенным шестнадцатеричным алфавитом» . RFC 4648: кодировки данных Base16, Base32 и Base64 . IETF.
  7. ^ "Советы и хитрости - geohash.org" . geohash.org . Проверено 3 апреля 2020 .
  8. ^ "CyoEncode" .
  9. ^ «Gnulib - Библиотека переносимости GNU - Проект GNU - Фонд свободного программного обеспечения» .
  10. ^ «MIME-Base32 - кодировщик и декодер Base32» . MetaCPAN . Проверено 29 июля 2018 .
  11. ^ «Base32 (API кодека Apache Commons 1.15)» .
  12. ^ "Base32" .
  13. ^ «Base64 - Кодировки данных Base16, Base32, Base64, Base85 - Документация Python 3.10.0» .
  14. ^ «Пакет Base32 - кодировка / Base32 - PKG.go.dev» .
  15. ^ https://rubygems.org/gems/base32
  16. ^ Конвертер строки в шестнадцатеричный