Base32 - Base32

Base32 er basen -32 tallsystem . Den bruker et sett med 32 sifre , som hver kan representeres med 5 bits (2 5 ). En måte å representere Base32-tall på en lesbar måte er å bruke et standard 32-tegnsett, for eksempel de tjueto store bokstavene A – V og sifrene 0-9. Imidlertid brukes mange andre variasjoner i forskjellige sammenhenger.

Dette er et eksempel på et Base32-nummer representert ved hjelp av det tidligere beskrevne 32-tegnsettet ( IPFS CIDv1 i Base32-versjonskoding):BAFYBEICZSSCDSBS7FFQZ55ASQDF3SMV6KLCW3GOFSZVWLYARCI47BGF354

Fordeler

Base32 har en rekke fordeler i forhold til Base64 :

  1. Det resulterende tegnsettet er alle ett tilfelle, som ofte kan være gunstig når du bruker et uvesensitivt filsystem , DNS- navn, talespråk eller menneskelig hukommelse.
  2. Resultatet kan brukes som filnavn fordi det umulig kan inneholde '/' -symbolet, som er Unix -veiseparatoren .
  3. Alfabetet kan velges for å unngå liknende par med forskjellige symboler, slik at strengene kan transkriberes nøyaktig for hånd. (For eksempel utelater RFC  4648 -datasettet sifrene for ett, åtte og null, siden de kan forveksles med bokstavene 'I', 'B' og 'O'.)
  4. Et resultat som ekskluderer polstring kan inkluderes i en URL uten å kode noen tegn.

Base32 har også fordeler fremfor heksadesimal / Base16 :

  1. Base32 -representasjon tar omtrent 20% mindre plass. (1000 bits tar 200 tegn, sammenlignet med 250 for Base16).

Ulemper

Base32 -representasjon tar omtrent 20% mer plass enn Base64 . Fordi den koder 5 byte til 8 tegn (i stedet for 3 byte til 4 tegn), er utfylling til en 8-tegners grense en større belastning for korte meldinger.

Lengde på Base64- og Base32 -notasjoner som prosentandel av binære data
Base64 Base32
8-bit 133% 160%
7-bit 117% 140%

RFC 4648 Base32 -alfabet

Det mest brukte Base32 -alfabetet er definert i RFC  4648 . Den bruker et alfabet med A - Z , etterfulgt av 2 - 7 . 0 og 1 hoppes over på grunn av deres likhet med bokstavene O og I (dermed har "2" faktisk en desimalverdi på 26 ).

I noen tilfeller er polstring ikke nødvendig eller brukt (polstringen kan utledes av lengden på strengmodulen 8). RFC 4648 sier at polstring må brukes med mindre spesifikasjonen til standarden som refererer til RFC eksplisitt sier noe annet. Å ekskludere padding er nyttig når du bruker base32 -kodede data i URL -tokens eller filnavn der padding -tegnet kan utgjøre et problem.

RFC 4648 Base 32 -alfabetet
Verdi Symbol Verdi Symbol Verdi Symbol Verdi Symbol
0 EN 8 Jeg 16 Sp 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 1. 3 N 21 V 29 5
6 G 14 O 22 W 30 6
7 H 15 P 23 X 31 7
polstring =

Alternative versjoner

Ved å endre Base32 -alfabetet, har alle alternative standarder lignende kombinasjoner av alfanumeriske symboler.

z-base-32

z-base-32 er en Base32-koding designet av Zooko Wilcox-O'Hearn for å være lettere for mennesker og mer kompakt. Den inkluderer 1 , 8 og 9, men ekskluderer l , v og 2 . Det permuterer også alfabetet slik at de lettere tegnene er de som forekommer oftere. Den koder kompakt bitstrenger hvis lengde i biter ikke er et multiplum av 8 og utelater etterfølgende polstringstegn. z-basis-32 ble brukt i den Mnet åpen kildekode, og benyttes i dag i Phil Zimmermann 's ZRTP protokollen, og i den Tahoe-LAFS åpen kildekode.

z-base-32 alfabet
Verdi Symbol Verdi Symbol Verdi Symbol Verdi Symbol
0 y 8 e 16 o 24 en
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 1. 3 s 21 Jeg 29 7
6 g 14 q 22 s 30 6
7 8 15 x 23 z 31 9

Crockford's Base32

En annen alternativ design for Base32 er skapt av Douglas Crockford , som foreslår å bruke flere tegn for en mod-37 kontrollsum. Det utelukker bokstavene I, L og O for å unngå forvirring med sifre. Det utelukker også bokstaven U for å redusere sannsynligheten for utilsiktet uanstendighet.

Biblioteker for å kode binære data i Crockford's Base32 er tilgjengelige på en rekke språk.

Crockfords Base32 -alfabet
Verdi Kode Siffer Dekode siffer Verdi Kode Siffer Dekode siffer
0 0 0 o O 16 G g G
1 1 1 i I l L 17 H h H
2 2 2 18 J j J
3 3 3 19 K k K
4 4 4 20 M m M
5 5 5 21 N n N
6 6 6 22 P s s
7 7 7 23 Sp q Q
8 8 8 24 R r R
9 9 9 25 S s S
10 EN a A. 26 T t T
11 B b B 27 V v V
12 C c C 28 W w W
1. 3 D d D 29 X x X
14 E e E 30 Y y Y
15 F f F 31 Z z Z

Electrologica

En tidligere form for base 32 -notasjon ble brukt av programmerere som jobbet på Electrologica X1 for å representere maskinadresser. "Sifrene" ble representert som desimaltall fra 0 til 31. For eksempel vil 12-16 representere maskinadressen 400 (= 12*32 + 16).

base32hex

Triacontakaidecimal er et annet alternativt design for Base 32, som strekker seg heksadesimalt på en mer naturlig måte og ble først foreslått av Christian Lanctot, en programmerer som jobber på Sage -programvare , i et brev til Dr. Dobbs magasin i mars 1999 som en foreslått løsning for å løse Y2K -feil og referert til som "Double Hex". Denne versjonen ble beskrevet i RFC  2938 under navnet "Base-32". RFC 4648, mens den anerkjenner eksisterende bruk av denne versjonen i NSEC3 , omtaler den som base32hex og fraråder å merke den som "base32".

På samme måte som heksadesimal er sifrene som brukes 0-9 etterfulgt av påfølgende bokstaver i alfabetet. Dette samsvarer med sifrene som brukes av JavaScript parseInt() -funksjonen og Python int() -konstruktøren når en base større enn 10 (for eksempel 16 eller 32) er spesifisert. Den beholder også heksadesimals egenskap for å bevare bitvis sorteringsrekkefølge for de representerte dataene, i motsetning til RFC 4648s base-32 eller base-64.

I motsetning til mange andre grunn 32 -notasjonssystemer, er triacontakaidecimal sammenhengende og inkluderer tegn som kan visuelt komme i konflikt. Med den riktige skriften er det mulig å skille visuelt mellom 0, O og 1, I. Andre fonter er uegnet fordi konteksten som engelsk vanligvis gir, ikke er gitt av et notasjonssystem som uttrykker tall. Valget av skrift er imidlertid ikke kontrollert av notasjon eller koding, og det er derfor det er risikabelt å anta at en skillbar skrift vil bli brukt.

"Extended Hex" Base 32 -alfabetet
Verdi Symbol Verdi Symbol Verdi Symbol Verdi Symbol
0 0 9 9 18 Jeg 27 R
1 1 10 EN 19 J 28 S
2 2 11 B 20 K 29 T
3 3 12 C 21 L 30 U
4 4 1. 3 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 Sp puten =

Geohash

Se Geohash-algoritmen , som brukes til å representere breddegrads- og lengdegradsverdier i ett (bitflettet) positivt heltall. Base32-representasjonen av Geohash bruker alle desimaler (0-9) og nesten alle små bokstaver, bortsett fra bokstavene "a", "i", "l", "o", som vist på følgende tegnkart:

Desimal 0 1 2 3 4 5 6 7 8 9 10 11 12 1. 3 14 15
Base 32 0 1 2 3 4 5 6 7 8 9 b c d e f g
 
Desimal 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Base 32 h j k m n s q r s t u v w x y z

Videospill

Før NVRAM ble universell, brukte flere videospill for Nintendo -plattformer basenummer 31 for passord . Disse systemene utelater vokaler (unntatt Y) for å forhindre at spillet ved et uhell gir et uhyggelig passord. Dermed er karakterene generelt en liten variasjon av følgende sett: 0–9, B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Y, Z og noen skilletegn. Spill som er kjent for å bruke et slikt system inkluderer Mario Is Missing! , Mario's Time Machine , Tetris Blast og The Lord of the Rings (Super NES) .

Ordsikkert alfabet

Det ordsikre Base32-alfabetet er en forlengelse av Open Location Code Base20- alfabetet. Det alfabetet bruker 8 numeriske siffer og 12 store bokstaver som ikke er følsomme for å unngå at ord dannes ved et uhell. Å behandle alfabetet som store og små bokstaver gir et sett på 32 (8+12+12).

Desimal 0 1 2 3 4 5 6 7 8 9 10 11 12 1. 3 14 15
Base 32 2 3 4 5 6 7 8 9 C F G H J M P Sp
 
Desimal 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Base 32 R V W X c f g h j m s q r v w x

Programvare

Base32 er en notasjon for koding av vilkårlige byte -data ved hjelp av et begrenset sett med symboler som enkelt kan brukes av mennesker og behandles av datamaskiner.

Base32 består av et symbol som består av 32 forskjellige tegn, samt en algoritme for koding av vilkårlige sekvenser med 8-bits bytes i Base32-alfabetet. Fordi mer enn ett 5-bits Base32-symbol er nødvendig for å representere hver 8-bits inngangsbyte, spesifiserer det også krav til de tillatte lengdene til Base32-strenger (som må være multipler med 40 bits). Det nært beslektede Base64 -systemet bruker derimot et sett med 64 symboler.

Base32 -implementeringer i C/C ++, Perl, Java, JavaScript Python, Go og Ruby er tilgjengelige.

Se også

"Powers of 2" relaterte baser:      Andre baser:      Søknader for base32:

Referanser