Base32 - Base32
Base32 это основание -32 система счисления. Используется набор из 32 цифры, каждый из которых может быть представлен 5 биты (25). Один из способов представления чисел Base32 в человек читаемый способ заключается в использовании стандартного набора из 32 символов, например, двадцати шести заглавных букв A – Z и цифр 2–7. Однако многие другие варианты используются в разных контекстах.
Это пример числа Base32, представленного с использованием ранее описанного 32-значного набора (IPFS CIDv1 в кодировке верхнего регистра Base32): BAFYBEICZSSCDSBS7FFQZ55ASQDF3SMV6KLCW3GOFSZVWLYARCI47BGF354
Преимущества
Base32 имеет ряд преимуществ перед Base64:
- Результирующий набор символов это все один случай, который часто может быть полезным при использовании без учета регистра файловая система, DNS имена, разговорный язык или человеческая память.
- Результат можно использовать в качестве имени файла, поскольку он не может содержать символ '/', который является Unix разделитель путей.
- Алфавит можно выбрать так, чтобы пары разных символов не выглядели одинаково, поэтому строки можно точно расшифровать вручную. (Например, RFC 4648 В наборе символов отсутствуют цифры для единицы, восьми и нуля, поскольку их можно спутать с буквами «I», «B» и «O».)
- Результат без заполнения может быть включен в URL без кодирование любые персонажи.
Base32 также имеет преимущества перед шестнадцатеричный /Base16:
- Представление Base32 занимает примерно на 20% меньше места. (1000 бит занимает 200 символов по сравнению с 250 для Base16).
Недостатки
Представление Base32 занимает примерно на 20% больше места, чем Base64. Кроме того, поскольку он кодирует от 5 байтов до 8 символов (а не от 3 байтов до 4 символов), заполнение до 8-символьной границы создает большую нагрузку на короткие сообщения.
Base64 | Base32 | |
---|---|---|
8 бит | 133% | 160% |
7-битный | 117% | 140% |
RFC 4648 алфавит Base32
Наиболее широко используемый алфавит Base32 определен в RFC 4648. Он использует алфавит из А –Z, с последующим 2 –7. 0 и 1 пропускаются из-за их сходства с буквами О и я (таким образом, "2" на самом деле имеет десятичное значение 26 ).
В некоторых случаях заполнение не требуется или не используется (заполнение можно вывести из длины строки по модулю 8). RFC 4648 гласит, что необходимо использовать заполнение, если в спецификации стандарта со ссылкой на RFC явно не указано иное. Исключение заполнения полезно при использовании данных в кодировке base32 в токенах URL или именах файлов, где символ заполнения может представлять проблему.
Ценить | Символ | Ценить | Символ | Ценить | Символ | Ценить | Символ | |||
---|---|---|---|---|---|---|---|---|---|---|
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[1] - это кодировка Base32, разработанная для упрощения использования человеком и большей компактности. Это включает в себя 1, 8 и 9 но исключает л, v и 2. Он также переставляет алфавит, чтобы более простые символы встречались чаще. Он компактно кодирует битовые строки, длина которых в битах не кратна 8, и опускает завершающие символы заполнения. z-base-32 использовался в Mnet проект с открытым исходным кодом, и в настоящее время используется в Фил Циммерманн с ZRTP протокол, а в Тахо-ЛАФС проект с открытым исходным кодом.
Ценить | Символ | Ценить | Символ | Ценить | Символ | Ценить | Символ | |||
---|---|---|---|---|---|---|---|---|---|---|
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 создан Дуглас Крокфорд, который предлагает использовать дополнительные символы для контрольной суммы.[2] Он исключает буквы I, L и O, чтобы не путать их с цифрами. Он также исключает букву U, чтобы уменьшить вероятность случайной непристойности.
Библиотеки для кодирования двоичных данных в Crockford's 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 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, в письме к Доктора Добба журнал в марте 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. Другие шрифты не подходят, потому что контекст, который обычно предоставляет английский, не обеспечивается системой обозначений, выражающей числа. Однако выбор шрифта не контролируется нотацией или кодировкой, поэтому рискованно предполагать, что будет использоваться различимый шрифт.
Ценить | Символ | Ценить | Символ | Ценить | Символ | Ценить | Символ | |||
---|---|---|---|---|---|---|---|---|---|---|
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, используется для представления значений широты и долготы одним положительным целым числом (с чередованием битов).[7] В представлении 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 платформы использовали базовые 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) цифр.
Десятичный | 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 ++,[8][9] Perl,[10] Ява,[11] JavaScript[12] Python,[13] Идти[14] и Руби[15] доступны.
Смотрите также
Основания, связанные с "Силой 2": | Прочие базы: | Приложения base32:
|
Рекомендации
- ^ О'Виелакронкс, Зуко (2009). "Кодирование по основанию 32, ориентированное на человека".
- ^ Дуглас Крокфорд. «База 32». Архивировано из оригинал на 2002-12-23.
- ^ Ланкто, Кристиан (1999-03-01). «Лучшее свидание? (вторая буква под этим заголовком) - Буквы". Доктора Добба.
- ^ "parseInt () - JavaScript". Веб-документы MDN. Mozilla.
- ^ «Встроенные функции». Документация Python. Фонд программного обеспечения Python. Архивировано из оригинал в 2018-10-26. Получено 2017-08-09.
- ^ Йозефссон, Саймон (2006). «7. Кодирование Base 32 с расширенным шестнадцатеричным алфавитом». RFC 4648: кодировки данных Base16, Base32 и Base64. IETF.
- ^ "Советы и хитрости - geohash.org". geohash.org. Получено 2020-04-03.
- ^ http://sourceforge.net/projects/cyoencode/
- ^ https://www.gnu.org/software/gnulib/
- ^ «MIME-Base32 - кодировщик и декодер Base32». MetaCPAN. Получено 2018-07-29.
- ^ https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base32.html
- ^ https://www.npmjs.com/package/base32
- ^ https://docs.python.org/3/library/base64.html
- ^ https://golang.org/pkg/encoding/base32
- ^ https://rubygems.org/gems/base32