베이스32

Base32

Base32Base-32 숫자 시스템을 기반으로 하는 인코딩 방법입니다.각각 5비트(25)의 서로 다른 조합을 나타내는 32자리의 알파벳을 사용합니다.base32는 매우 광범위하게 채택되지 않기 때문에, RFC와 비공식적, 사실상의 표준이 존재하지만, 32자리 숫자를 나타내기 위해 어떤 문자를 사용할 것인가 하는 표기법의 문제는 더 잘 알려진 숫자 체계(예: 16진수)의 경우처럼 해결되지 않습니다.사람이 읽을 수 있는 방식으로 Base32 숫자를 나타내는 한 가지 방법은 0-9와 22개의 대문자 A-V를 사용하는 것입니다.그러나 다른 많은 변형들이 다른 맥락에서 사용됩니다.역사적으로 보아 보도 코드는 수정된 (스테이트풀) 베이스32 코드로 간주될 수 있습니다.

이 문서는 Base64가 작동하는 방식과 유사하게 부호 없는 정수가 아닌 바이트 문자열을 표현하기 위한 Base32의 사용에 초점을 맞추고 있습니다.

RFC 4648 베이스32 알파벳

가장 널리 사용되는 Base32 알파벳은 다음과 같이 정의됩니다. RFC4648 또는 이전 RFC3548, 원래 John Myers가 SASL/GSSAPI용으로 설계했습니다.[1]알파벳 A-Z 뒤에 2-7오는 알파벳을 사용합니다.숫자 0, 1, 8O, I, B와 유사하기 때문에 생략됩니다(따라서 "2"의 십진수 값은 26입니다).

상황에 따라 패딩이 필요하지 않거나 사용되는 경우도 있습니다(패딩은 문자열 모듈로 8의 길이에서 유추할 수 있습니다).RFC 4648은 표준의 명세(RFC 참조)가 명시적으로 달리 명시하지 않는 한 패딩을 사용해야 한다고 명시하고 있습니다.패딩을 제외하는 것은 패딩 문자가 문제를 일으킬 수 있는 URL 토큰이나 파일 이름에서 Base32 인코딩 데이터를 사용할 때 유용합니다.

RFC 4648 Base32 알파벳
가치 기호. 가치 기호. 가치 기호. 가치 기호.
0 A 8 I 16 Q 24 Y
1 B 9 J 17 R 25 Z
2 C 10 K 18 S 26 2
3 D 11 L 19 T 27 3
4 E 12 M 20 U 28 4
5 F 13 N 21 V 29 5
6 G 14 O 22 W 30 6
7 H 15 P 23 X 31 7
패딩 =

다음은 앞서 설명한 32자 집합(Base32 대문자 인코딩의 IPFS CIDv1)을 사용한 Base32 표현의 예입니다.BAFYBEICZSSCDSBS7FFQZ55ASQDF3SMV6KLCW3GOFSZVWLYARCI47BGF354

대체 인코딩 방식

Base32 알파벳을 변경하면 모든 대체 표준은 영숫자 기호 조합이 유사합니다.

z-베이스-32

z-base-32는[2] Zooko Wilcox-O'가 설계한 Base32 인코딩입니다.사람이 사용하기 쉽고 컴팩트하게 사용할 수 있습니다.1, 8, 9는 포함되지만 l, v, 2는 제외됩니다.또한 알파벳을 순열하여 더 쉬운 문자가 더 자주 발생하도록 합니다.[clarification needed]비트 길이가 8의[clarification needed] 배수가 아닌 비트열을 콤팩트하게 부호화하고, 후행 패딩 문자를 생략합니다. z-base-32는 Mnet 오픈소스 프로젝트에서 사용되었으며, 현재 Phil ZimmermannZRTP 프로토콜과 Tahoe-LAFS 오픈소스 프로젝트에서 사용되고 있습니다.

z-base-32 알파벳
가치 기호. 가치 기호. 가치 기호. 가치 기호.
0 y 8 e 16 o 24 a
1 b 9 j 17 t 25 3
2 n 10 k 18 1 26 4
3 d 11 m 19 u 27 5
4 r 12 c 20 w 28 h
5 f 13 p 21 i 29 7
6 g 14 q 22 s 30 6
7 8 15 x 23 z 31 9

크록포드 베이스32

Base32의 또 다른 대체 디자인은 mod-37 체크섬에 추가 문자를 사용할 것을 제안하는 Douglas Crockford에 의해 만들어졌습니다.[3]숫자와 혼동을 피하기 위해 문자 I, L, O는 제외됩니다.또한 실수로 외설이 발생할 가능성을 줄이기 위해 U자를 제외합니다.

Crockford의 Base32에서 이진 데이터를 인코딩하기 위한 라이브러리는 다양한 언어로 제공됩니다.

크록포드의 베이스32 알파벳
가치 숫자 인코딩 디코드 숫자 가치 숫자 인코딩 디코드 숫자
0 0 0 O 16 G 지 지
1 1 1 I L 17 H
2 2 2 18 J 제이제이
3 3 3 19 K ㅋㅋ
4 4 4 20 M 음.
5 5 5 21 N n N
6 6 6 22 P 피피
7 7 7 23 Q Q.Q
8 8 8 24 R r R
9 9 9 25 S
10 A A. A. 26 T t T
11 B B B 27 V v V
12 C 28 W 더블유
13 D 라. 29 X x X
14 E EE 30 Y Y Y
15 F fF 31 Z Z Z

일렉트로로지카

초기 형태의 베이스 32 표기법은 Electrologica X1을 작업하는 프로그래머들이 기계 주소를 나타내기 위해 사용했습니다."숫자"는 0부터 31까지의 10진수로 표시되었습니다.예를 들어, 12-16은 기계 주소 400(= 12 × 32 + 16)을 나타냅니다.

base32hex

"확장 헥스" 베이스 32 또는 베이스 32[4] 헥스는 베이스 32의 또 다른 대체 설계로, 16진수를 더 자연스러운 방식으로 확장하며 1999년[5] 3월에 세이지 소프트웨어에서 일하는 프로그래머인 크리스티안 랑콧이 Y2K 버그를 해결하기 위한 제안된 해결책으로 닥터 돕지에게 보낸 편지에서 처음 제안되었으며 "더블 헥스"로 언급되었습니다.이 버전은 RFC 2938에서 "Base-32"라는 이름으로 설명되었습니다. RFC 4648은 NSEC3에서 이 버전을 기존에 사용하는 것을 인정하면서 base32hex라고 부르고 base32로만 표시하지 않도록 합니다.

16진수와 유사하게 사용되는 숫자는 0-9와 알파벳의 연속된 문자입니다.이것은 자바스크립트가 사용하는 숫자와 일치합니다. parseInt()함수와[6] 파이썬 int()10보다 큰 베이스(예: 16 또는 32)가 지정된 경우 생성자[7].또한 RFC 4648의 베이스-32나 베이스-64와는 달리 표현된 데이터의 비트 단위 정렬 순서를 보존하는 16진수 속성을 유지합니다.[4]

다른 많은 기본 32개 표기법과 달리, 9를 넘는 기본 32개의 숫자는 연속적이고 시각적으로 충돌할 수 있는 문자를 포함합니다.올바른 글꼴을 사용하면 0, O와 1, I를 시각적으로 구분할 수 있습니다.다른 글꼴은 영어가 제공하는 컨텍스트가 숫자를 표현하는 표기 시스템에 의해 제공되지 않기 때문에 적합하지 않습니다.그러나 글꼴 선택은 표기법이나 인코딩에 의해 제어되지 않으므로 구별 가능한 글꼴이 사용된다고 가정하는 것이 위험합니다.

"확장 육각형" 베이스 32 알파벳
가치 기호. 가치 기호. 가치 기호. 가치 기호.
0 0 9 9 18 I 27 R
1 1 10 A 19 J 28 S
2 2 11 B 20 K 29 T
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 O
7 7 16 G 25 P
8 8 17 H 26 Q 패드를 대다 =

지오해시

위도 및 경도 값을 1(비트 인터레이스된) 양의 정수로 나타내는 데 사용되는 Geohash 알고리즘을 참조하십시오.[8]지오해시의 32진법은 다음 문자 지도와 같이 문자 "a", "i", "l", "o"를 제외한 거의 모든 10진법 숫자(0-9)와 소문자 알파벳을 사용합니다.

십진법 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 b c d e f g
십진법 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
베이스32 h j k m n p q r s t u v w x y z

비디오 게임

NVRAM이 보편화되기 전에 닌텐도 플랫폼용 비디오 게임들은 비밀번호에 기본 숫자 31을 사용했습니다.이러한 시스템은 게임이 실수로 불경스러운 비밀번호를 부여하는 것을 방지하기 위해 모음을 생략합니다.따라서 문자는 일반적으로 0-9, B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Y, Z 및 일부 문장부호의 약간의 변형입니다.이런 시스템을 사용하는 것으로 알려진 게임으로는 마리오 이즈 미씽!, 마리오의 타임머신, 테트리스 블래스트, 그리고 반지제왕이 있습니다.

단어 안전 알파벳

단어 안전 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 G H J M P Q
십진법 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
베이스32 R V W X c f g h j m p q r v w x

다른 시스템과의 비교

이점

Base32는 Base64에 비해 많은 장점을 가지고 있습니다.

  1. 결과적인 문자 집합은 모두 하나의 경우이며, 대소문자 구분이 없는 파일 시스템, DNS 이름, 구어 또는 휴먼 메모리를 사용할 때 유용할 수 있습니다.
  2. 결과는 유닉스 경로 구분 기호인 '/' 기호를 포함할 수 없으므로 파일 이름으로 사용할 수 있습니다.
  3. 알파벳은 서로 다른 기호들의 비슷한 모양의 쌍들을 피하도록 선택될 수 있으므로, 문자열을 손으로 정확하게 전사할 수 있습니다. (예를 들어, RFC 4648 기호 집합은 1, 8, 0의 숫자를 생략하는데, 이는 문자 'I', 'B', 'O'와 혼동될 수 있기 때문입니다.)
  4. 패딩을 제외한 결과는 문자 인코딩 없이 URL에 포함될 수 있습니다.
  5. 5비트를 사용하면 32비트 정수당 2자를 더 저장할 수 있으므로(2비트 여유가 있는 4자 대신 총 6자), 라디오 메쉬와 같은 제한된 도메인에서 대역폭을 절약할 수 있습니다.

Base32는 16진수/Base16에 비해 장점이 있습니다.

  1. Base32 표현을 사용하면 공간이 20% 줄어듭니다.(1,000비트는 200자를 사용하는데 비해 Base16의 경우 250자를 사용합니다.)

단점들

Base32 표현은 Base64보다 약 20% 더 많은 공간을 사용합니다.또한 5바이트에서 8자(3바이트에서 4자)를 인코딩하기 때문에 8자 경계에 패딩하는 것은 짧은 메시지에 더 큰 부담이 됩니다(RFC 4648의 옵션인 패딩을 회피하는 이유일 수 있습니다).

이진 데이터의 백분율로 표기하는 길이
베이스64 베이스32 십육진법
8비트 133% 160% 200%
7비트 117% 140% 175%

Base32가 16진수보다 약 20% 적은 공간을 사용하더라도 Base32는 훨씬 적게 사용됩니다.16진수는 두 개의 16진수가 하나의 바이트이기 때문에 바이트에 쉽게 매핑될 수 있습니다.Base32는 개별 바이트에 매핑되지 않습니다.그러나 두 개의 Base32 숫자는 10비트에 해당하며, 1,024의 전력으로 볼 때 (32 × 32 =) 1,024 값을 인코딩할 수 있습니다.

16진수는 6개의 추가 기호(A~F)의 숫자 값만 기억하면 되기 때문에 배우고 기억하기가 더 쉽고, 즉시 기억하지 않더라도 몇 개의 값을 통해 세는 것이 더 쉽습니다.

소프트웨어 구현

Base32 프로그램은 사람이 편리하게 사용할 수 있고 컴퓨터가 처리할 수 있는 제한된 기호 집합을 사용하여 임의의 바이트 데이터를 인코딩하는 데 적합합니다.

Base32 구현에서는 최소 32개의 다른 문자로 구성된 기호 집합(패딩의 경우 33번째)과 8비트 바이트의 임의 시퀀스를 Base32 알파벳으로 인코딩하는 알고리즘을 사용합니다.각 8비트 입력 바이트를 나타내려면 5비트 Base32 기호가 하나 이상 필요하므로 Base32 문자열의 허용 길이에 대한 요구 사항도 지정합니다(40비트의 배수여야 함).이와는 대조적으로 밀접하게 관련된 Base64 시스템은 64개의 기호 세트를 사용합니다.

C/C++,[9][10] Perl,[11] Java,[12] Java Script[13] Python,[14] Go[15] 및 Ruby에서[16] Base32 구현을 사용할 수 있습니다.

참고 항목

파워 오브 2 관련 베이스: 기타 베이스: 베이스32의 응용 프로그램:

참고문헌

  1. ^ Myers, J. (May 23, 2000). SASL GSSAPI mechanisms. I-D draft-ietf-cat-sasl-gssapi-01. Retrieved 2023-06-24.
  2. ^ O'Whielacronx, Zooko (2009). "Human-oriented base-32 encoding".
  3. ^ Douglas Crockford. "Base 32". Archived from the original on 2002-12-23.
  4. ^ a b Josefsson, Simon (2006). "7. Base 32 Encoding with Extended Hex Alphabet". RFC 4648: The Base16, Base32, and Base64 Data Encodings. IETF. doi:10.17487/RFC4648.
  5. ^ Lanctot, Christian (1999-03-01). "A Better Date? (second letter under that heading) - Letters". Dr Dobb's.
  6. ^ "parseInt() - JavaScript". MDN Web Docs. Mozilla.
  7. ^ "Built-in Functions". Python documentation. Python Software Foundation. Archived from the original on 2018-10-26. Retrieved 2017-08-09.
  8. ^ "Tips & Tricks - geohash.org". geohash.org. Retrieved 2020-04-03.
  9. ^ "CyoEncode". SourceForge.
  10. ^ "Gnulib - GNU Portability Library - GNU Project - Free Software Foundation". www.gnu.org.
  11. ^ "MIME-Base32 - Base32 encoder and decoder". MetaCPAN. Retrieved 2018-07-29.
  12. ^ "Base32 (Apache Commons Codec 1.15 API)". commons.apache.org.
  13. ^ "base32". npm.
  14. ^ "base64 — Base16, Base32, Base64, Base85 Data Encodings". Python documentation.
  15. ^ "Base32 package - encoding/Base32 - PKG.go.dev".
  16. ^ "base32 RubyGems.org your community gem host". rubygems.org.
  17. ^ "String To Hex Converter". Beautify Code.