Base32 - Base32

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

Это пример числа 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 в процентах от двоичных данных
Base64Base32
8 бит133%160%
7-битный117%140%

RFC 4648 алфавит Base32

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

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

RFC 4648 Base 32 алфавит
ЦенитьСимволЦенитьСимволЦенитьСимволЦенитьСимвол
0А8я16Q24Y
1B9J17р25Z
2C10K18S262
3D11L19Т273
4E12M20U284
5F13N21V295
6грамм14О22W306
7ЧАС15п23Икс317
набивка=

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

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

z-base-32

z-base-32[1] - это кодировка Base32, разработанная для упрощения использования человеком и большей компактности. Это включает в себя 1, 8 и 9 но исключает л, v и 2. Он также переставляет алфавит, чтобы более простые символы встречались чаще. Он компактно кодирует битовые строки, длина которых в битах не кратна 8, и опускает завершающие символы заполнения. z-base-32 использовался в Mnet проект с открытым исходным кодом, и в настоящее время используется в Фил Циммерманн с ZRTP протокол, а в Тахо-ЛАФС проект с открытым исходным кодом.

z-base-32 алфавит
ЦенитьСимволЦенитьСимволЦенитьСимволЦенитьСимвол
0у8е16о24а
1б9j17т253
2п10k181264
3d11м19ты275
4р12c20ш28час
5ж13п21я297
6грамм14q22s306
7815Икс23z319

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

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

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

Алфавит Крокфорда Base32
ЦенитьКодировать цифруРасшифровать цифруЦенитьКодировать цифруРасшифровать цифру
000 o O16граммг G
111 я л л17ЧАСh H
22218Jj J
33319Kk K
44420Mм М
55521Nп N
66622пp P
77723Qq Q
88824рr R
99925SSS
10Аа А26Тт т
11Bб В27Vv V
12Cв C28Ww W
13Dd D29Иксх х
14Ee E30Yy Y
15Ff F31Zz Z

Electrologica

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

base32hex

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

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

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

Алфавит с основанием 32 "Extended Hex"
ЦенитьСимволЦенитьСимволЦенитьСимволЦенитьСимвол
009918я27р
1110А19J28S
2211B20K29Т
3312C21L30U
4413D22M31V
5514E23N
6615F24О
7716грамм25п
8817ЧАС26Qподушечка=

Geohash

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

Десятичный0123456789101112131415
База 320123456789бcdежграмм
 
Десятичный16171819202122232425262728293031
База 32часjkмппqрsттыvшИксуz

Видеоигры

Перед NVRAM стали универсальными, несколько видеоигр для Nintendo платформы использовали базовые 32 числа для пароли Эти системы пропускают гласные, чтобы игра случайно не нечестивый пароль. Таким образом, символы, как правило, представляют собой незначительную вариацию следующего набора: 0–9, B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Y, Z и некоторые знаки препинания. Известно, что в играх используется такая система. Марио пропал!, Машина времени Марио, Тетрис Взрыв, и Властелин колец (Супер NES).

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

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

Десятичный0123456789101112131415
База 3223456789CFграммЧАСJMпQ
 
Десятичный16171819202122232425262728293031
База 32рVWИксcжграммчасjмпqрvшИкс

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

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

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

Реализации Base32 на C / C ++,[8][9] Perl,[10] Ява,[11] JavaScript[12] Python,[13] Идти[14] и Руби[15] доступны.

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

Основания, связанные с "Силой 2":    Прочие базы:    Приложения base32:

Рекомендации

  1. ^ О'Виелакронкс, Зуко (2009). "Кодирование по основанию 32, ориентированное на человека".
  2. ^ Дуглас Крокфорд. «База 32». Архивировано из оригинал на 2002-12-23.
  3. ^ Ланкто, Кристиан (1999-03-01). «Лучшее свидание? (вторая буква под этим заголовком) - Буквы". Доктора Добба.
  4. ^ "parseInt () - JavaScript". Веб-документы MDN. Mozilla.
  5. ^ «Встроенные функции». Документация Python. Фонд программного обеспечения Python. Архивировано из оригинал в 2018-10-26. Получено 2017-08-09.
  6. ^ Йозефссон, Саймон (2006). «7. Кодирование Base 32 с расширенным шестнадцатеричным алфавитом». RFC 4648: кодировки данных Base16, Base32 и Base64. IETF.
  7. ^ "Советы и хитрости - geohash.org". geohash.org. Получено 2020-04-03.
  8. ^ http://sourceforge.net/projects/cyoencode/
  9. ^ https://www.gnu.org/software/gnulib/
  10. ^ «MIME-Base32 - кодировщик и декодер Base32». MetaCPAN. Получено 2018-07-29.
  11. ^ https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base32.html
  12. ^ https://www.npmjs.com/package/base32
  13. ^ https://docs.python.org/3/library/base64.html
  14. ^ https://golang.org/pkg/encoding/base32
  15. ^ https://rubygems.org/gems/base32