Basis32
Basis32 ist der Base-32 Ziffernungssystem. Es verwendet einen Satz von 32 Ziffern, jeder von ihnen kann durch 5 dargestellt werden Bits (25). Eine Möglichkeit, Base32 -Zahlen in a darzustellen für Menschen lesbar Die Art und Weise, wie ein Standard-32-Charakter-Set verwendet wird, wie z. Viele andere Variationen werden jedoch in verschiedenen Kontexten verwendet.
Der Rest dieses Artikels erörtert die Verwendung von Basi Basis64 Arbeiten.
Dies ist ein Beispiel für eine Base32-Darstellung unter Verwendung des zuvor beschriebenen 32-Charakter-Satzes (IPFS CIDV1 in Base32 Upper-Case-Codierung): BAFYBEICZSSCDSBS7FFQZ55ASQDF3SMV6KLCW3GOFSZVWLYARCI47BGF354
Vorteile
Base32 hat eine Reihe von Vorteilen gegenüber Basis64:
- Das resultierende Zeichensatz ist alles ein Fall, was bei Verwendung a häufig von Vorteil sein kann Fall-unempfindlich Dateisystem, DNS Namen, gesprochene Sprache oder menschliches Gedächtnis.
- Das Ergebnis kann als Dateiname verwendet werden, da es möglicherweise das Symbol '/' nicht enthalten kann, das ist das Unix Pfadabscheider.
- Das Alphabet kann ausgewählt werden, um ähnlich aussehende Paare verschiedener Symbole zu vermeiden, sodass die Saiten von Hand genau transkribiert werden können. (Zum Beispiel die RFC 4648 Das Symbol Set lässt die Ziffern für eine, acht und null aus, da sie mit den Buchstaben 'I', 'B' und 'O' verwechselt werden konnten.)
- Ein Ergebnis ohne Polsterung kann in a enthalten sein URL ohne Codierung Alle Charaktere.
- 5-Bit ermöglicht das Speichern von 2 weiteren Zeichen pro 32-Bit-Ganzzahl (für insgesamt 6 anstelle von 4 mit 2 Bit), was die Bandbreite in eingeschränkten Domänen wie Radiomeshes spart.
Base32 hat auch Vorteile gegenüber hexadezimal/Basis16:
- Die Basis32 -Darstellung nimmt ungefähr 20% –21% weniger Platz. (1000 Bit dauert 200 Zeichen, verglichen mit 250 für Base16).
Nachteile
Basis32 -Darstellung nimmt ungefähr 20% mehr Platz als Basis64. Da es 5 Bytes für 8 Zeichen (anstelle von 3 Bytes bis 4 Zeichen) codiert, ist die Polsterung an eine Grenze mit 8 Charakter eine größere Belastung für kurze Nachrichten (was ein Grund für die Elidepolsterung sein kann, was eine Option in der Option ist RFC 4648).
Basis64 | Basis32 | |
---|---|---|
8 Bit | 133% | 160% |
7-Bit | 117% | 140% |
RFC 4648 Base32 Alphabet
Das am weitesten verbreitete Base32 -Alphabet ist in definiert in RFC 4648. Es verwendet ein Alphabet von A–Z, gefolgt von 2–7. Die Ziffern 0, 1 und 8 werden aufgrund ihrer Ähnlichkeit mit den Buchstaben übersprungen O, I und B (So hat "2" einen Dezimalwert von 26).
Unter bestimmten Umständen ist keine Polsterung erforderlich oder verwendet (die Polsterung kann aus der Länge des Saitenmodulo 8 abgeleitet werden). RFC 4648 gibt an, dass die Polsterung verwendet werden muss, sofern die Spezifikation des Standards, das sich auf die RFC bezieht, ausdrücklich anders angibt. Das Ausschluss von Polsterung ist nützlich, wenn Base32 -codierte Daten in URL -Token oder Dateinamen verwendet werden, bei denen das Polstercharakter ein Problem darstellen kann.
Wert | Symbol | Wert | Symbol | Wert | Symbol | Wert | Symbol | |||
---|---|---|---|---|---|---|---|---|---|---|
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 | |||
Polsterung | = |
Alternative Versionen
Wenn alle alternativen Standards das Base32 -Alphabet verändern, weisen alle alternativen Standards ähnliche Kombinationen alphanumerischer Symbole auf.
Z-Base-32
Z-Base-32[1] ist eine Basis32 -Codierung, die von entworfen wurde, Zooko Wilcox-o'hearn leichter für den menschlichen Gebrauch und kompakter sein. Es enthält 1, 8 und 9 aber ausschließt l, v und 2. Es durchdringt auch das Alphabet so, dass die einfacheren Zeichen häufiger auftreten. Es codiert bitstrings kompakt, deren Länge in Bits kein Vielfaches von 8 ist, und lässt nachfolgende Polsterzeichen aus. Z-Base-32 wurde in der verwendet Mnet Open Source -Projekt und wird derzeit in verwendet Phil Zimmermann's ZRTP Protokoll und in der Tahoe-Lafs Open Source -Projekt.
Wert | Symbol | Wert | Symbol | Wert | Symbol | Wert | Symbol | |||
---|---|---|---|---|---|---|---|---|---|---|
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 |
Crockfords Basis32
Ein weiteres alternatives Design für Base32 wird von erstellt von Douglas Crockford, wer schlägt vor, zusätzliche Zeichen für eine MOD-37-Prüfsumme zu verwenden.[2] Es schließt die Buchstaben I, L und O aus, um Verwirrung mit Ziffern zu vermeiden. Es schließt auch den Brief U aus, um die Wahrscheinlichkeit einer versehentlichen Obszönität zu verringern.
Bibliotheken, um Binärdaten in Crockfords Base32 zu codieren, sind in einer Vielzahl von Sprachen verfügbar.
Wert | Codieren Sie die Ziffer | Entschlüsseln Sie die Ziffer | Wert | Codieren Sie die Ziffer | Entschlüsseln Sie die Ziffer | |
---|---|---|---|---|---|---|
0 | 0 | 0 o o | 16 | G | g g | |
1 | 1 | 1 i i l l l l l l l l l | 17 | H | H h | |
2 | 2 | 2 | 18 | J | J j | |
3 | 3 | 3 | 19 | K | k k k | |
4 | 4 | 4 | 20 | M | m m | |
5 | 5 | 5 | 21 | N | n n n | |
6 | 6 | 6 | 22 | P | p p | |
7 | 7 | 7 | 23 | Q | Q q | |
8 | 8 | 8 | 24 | R | r r | |
9 | 9 | 9 | 25 | S | s s | |
10 | A | a a | 26 | T | t t | |
11 | B | b b | 27 | V | v v | |
12 | C | c c | 28 | W | w w | |
13 | D | d d | 29 | X | x x | |
14 | E | e e | 30 | Y | y y | |
15 | F | f f | 31 | Z | z z |
Elektrologie
Eine frühere Form der Basis 32 -Notation wurde von Programmierern verwendet, die an der Arbeit arbeiten Electrologica X1 Maschinenadressen darstellen. Die "Ziffern" wurden als Dezimalzahlen von 0 bis 31 dargestellt. Zum Beispiel, zum Beispiel, 12-16 würde die Maschinenadresse darstellen 400 (= 12*32 + 16).
Base32hex
Triacontakaidecimal ist ein weiteres alternatives Design für Base 32, das erstreckt hexadezimal auf natürlichere Weise und wurde erstmals von Christian Lanctot vorgeschlagen, einem Programmierer bei der Arbeit bei Salbei -Softwarein einem Brief an Dr. Dobbs Zeitschrift im März 1999[3] Als vorgeschlagene Lösung zur Lösung des Y2K -Fehlers und als "Doppelhex" bezeichnet. Diese Version wurde in beschrieben RFC 2938 Unter dem Namen "Base-32". RFC 4648, während die vorhandene Verwendung dieser Version in der vorhandenen Verwendung anerkannt wird NSEC3bezieht sich darauf als Base32hex und entmutigt, es als "Base32" zu kennzeichnen.
Ähnlich wie hexadezimal sind die verwendeten Ziffern 0-9, gefolgt von aufeinanderfolgenden Buchstaben des Alphabets. Dies entspricht den Ziffern, die von der verwendet werden JavaScript parseInt ()
Funktion[4] und die Python int ()
Konstrukteur[5] Wenn eine Basis größer als 10 (z. B. 16 oder 32) angegeben ist. Im Gegensatz zu Bas-32 oder Base-64 von RFC 4648 behält es auch Hexadezimaleigenschaft bei, bitweise Sortierreihenfolge der dargestellten Daten zu erhalten.[6]
Im Gegensatz zu vielen anderen Basis -32 -Notationssystemen ist Triacontakaidecimal zusammenhängend und umfasst Charaktere, die visuell konfliktfrei sind. Mit dem Recht Schriftart Es ist möglich, visuell zwischen 0, O und 1 zu unterscheiden. Andere Schriftarten sind ungeeignet, da der Kontext, den Englisch normalerweise bereitstellt, nicht durch ein Notationssystem bereitgestellt wird, das Zahlen ausdrückt. Die Wahl der Schrift wird jedoch nicht durch Notation oder Codierung kontrolliert, weshalb es riskant ist, eine unterscheidbare Schriftart zu verwenden.
Wert | Symbol | Wert | Symbol | Wert | Symbol | Wert | Symbol | |||
---|---|---|---|---|---|---|---|---|---|---|
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 | Ö | |||||
7 | 7 | 16 | G | 25 | P | |||||
8 | 8 | 17 | H | 26 | Q | Pad | = |
Geohash
Sehen Geohash -Algorithmus, verwendet, um Breiten- und Längengradwerte in einer (Bit-Interlaced) positiven Ganzzahl darzustellen.[7] Die Base32 -Darstellung von Geohash verwendet alle Dezimalstellen (0–9) und fast das gesamte Alphabet des unteren Falles, außer Buchstaben "A", "I", "L", "O", wie aus der folgenden Zeichenkarte gezeigt:
Dezimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Basis 32 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | b | c | d | e | f | g | |||
Dezimal | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
Basis 32 | h | j | k | m | n | p | q | r | s | t | u | v | w | x | y | z |
Videospiele
Vor NVRAM wurde universell, mehrere Videospiele für Nintendo Plattformen verwendeten Basis 31 Nummern für Passwörter. Diese Systeme lassen Vokale (außer y) weg, um zu verhindern, dass das Spiel versehentlich a gibt entweihen Passwort. Somit sind die Zeichen im Allgemeinen eine geringfügige Variation des folgenden Satzes: 0–9, B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Y, Z und einige Interpunktionsmarken. Zu bekannte Spiele, die ein solches System verwenden, gehören Mario fehlt!, Marios Zeitmaschine, Tetris Blast, und Der Herr der Ringe (Super NES).
Wortsicherer Alphabet
Das Wort-Safe-Basis32-Alphabet ist eine Erweiterung der Offenbares Standortcode Basis20 Alphabet. Dieses Alphabet verwendet 8 numerische Ziffern und 12 von Fall unempfindliche Buchstaben, die ausgewählt wurden, um versehentlich geformtes Wörter zu vermeiden. Die Behandlung des Alphabets als Fallempfindlichkeit erzeugt einen Ziffernsatz von 32 (8+12+12).
Dezimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Basis 32 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | C | F | G | H | J | M | P | Q | |||
Dezimal | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
Basis 32 | R | V | W | X | c | f | g | h | j | m | p | q | r | v | w | x |
Software
Base32 ist eine Notation für die codierenden beliebigen Bytedaten unter Verwendung eines eingeschränkten Satzes von Symbolen, die von Menschen bequem verwendet und von Computern verarbeitet werden können.
Base32 besteht aus einem Symbol, das aus 32 verschiedenen Zeichen besteht, sowie aus einem Algorithmus zur kodierenden beliebigen Sequenzen von 8-Bit-Bytes in das Basis32-Alphabet. Da mehr als ein 5-Bit-Basis32-Symbol benötigt wird, um jedes 8-Bit-Eingangsbyte darzustellen, gibt es auch Anforderungen an den zulässigen Längen von Base32-Zeichenfolgen an (die ein Vielfaches von 40 Bits haben müssen). Das eng verwandte Base64 -System verwendet dagegen einen Satz von 64 Symbolen.
Base32 Implementierungen in C/C ++,[8][9] Perl,[10] Java,[11] JavaScript[12] Python,[13] gehen[14] und Rubin[15] stehen zur Verfügung.[16]
Siehe auch
"Powers of 2" verwandte Basen: | Andere Basen: | Anwendungen von Base32:
|
Verweise
- ^ O'Whielacronx, Zooko (2009). "Humanorientierte Basis-32-Codierung".
- ^ Douglas Crockford. "Basis 32". Archiviert von das Original Am 2002-12-23.
- ^ Lanctot, Christian (1999-03-01). "Ein besseres Date? (zweiter Brief unter dieser Überschrift) - Briefe". Dr. Dobbs.
- ^ "ParseInt () - JavaScript". MDN Web Docs. Mozilla.
- ^ "Integrierte Funktionen". Python -Dokumentation. Python Software Foundation. Archiviert von das Original Am 2018-10-26. Abgerufen 2017-08-09.
- ^ Josefsson, Simon (2006). "7. Basis 32 Codierung mit erweitertem Hex -Alphabet". RFC 4648: Die Datencodierungen Base16, Base32 und Base64. Ietf.
- ^ "Tipps & Tricks - Geohash.org". Geohash.org. Abgerufen 2020-04-03.
- ^ "Cyoencode".
- ^ "Gnulib - GNU -Portabilitätsbibliothek - GNU -Projekt - kostenlose Software -Stiftung".
- ^ "MIME -BASE32 - BASE32 CODER und Decoder". Metacpan. Abgerufen 2018-07-29.
- ^ "Base32 (Apache Commons Codec 1.15 API)".
- ^ "Base32".
- ^ "Base64 - Base16, Base32, Base64, Base85 Datencodierungen - Python 3.10.0 Dokumentation".
- ^ "Base32 Paket - Codierung/Base32 - pkg.go.dev".
- ^ https://rubygems.org/gemems/base32
- ^ String zum Hex -Konverter