Base-Codierung anhand von base32

@maini · 2019-04-19 21:22 · steemstem

Daten können in verschiedenen Repräsentationen vorliegen: Während der Mensch am liebsten Zahlen, Buchstaben und Sonderzeichen ließt, stellen diese für einen Computer lediglich Bitfolgen, also Nullen und Einsen dar. Standards wie ASCII ermöglichen es hier überhaupt erst, das eine solche Maschine die für Menschen lesbaren Zeichen ausgeben und verarbeiten kann. Hierfür werden, salopp gesagt, bestimmte Bitmuster als Zeichen interpretiert.

Doch was ist nun, wenn wir eine Schnittstelle verwenden, welche ausschließlich ASCII-basierte Zeichen unterstützt? Ist es möglich, auch Bits über ebendiese zu übertragen?

Wenn ich eine E-Mail versende, einen IRC verwende, oder einen Messenger mit lediglich Textfunktion benutze, kann ich hierüber auch Dateien übermitteln?

Base-Codierung

Egal ob Base16, Base32 oder Base64, die zugrundeliegende Idee ist dieselbe: Wir teilen die Bits der zu codierenden Daten in Gruppen der Länge von n Bits auf. Diese werden nun anhand einer Tabelle in ein ASCII-Zeichen umgewandelt. Heraus kommt eine Zeichenfolge, welche sich für textbasierte Kommunikation eignet.

Im folgenden werde ich beispielhaft genauer auf base32 eingehen, da das Konzept hierdurch etwas klarer werden sollte.

Base32

Base32 teilt die Daten in Bitgruppen der Länge 5 auf. Die Übersetzung erfolgt für 40 Bit, also 8 Buchstaben in der Ausgabe auf einmal. Die Tabelle sieht folgendermaßen aus: Wert | Codierung|Wert|Codierung|Wert|Codierung|Wert|Codierung --|--|--|--|--|--|--|-- 0|A|9|J|18|S|26|2 1|B|10|K|19|T|27|3 2|C|11|L|20|U|28|4 3|D|12|M|21|V|29|5 4|E|13|N|22|W|30|6 5|F|14|O|23|X|31|7 6|G|15|P|24|Y|Padding|= 7|H|16|Q|25|Z 8|I|17|R|

Hierbei sei anzumerken, das durch das Konvertieren in 8er-Gruppen (40Bits) die Zahl der Buchstaben durch 8 teilbar sein muss. Sollte dem nicht so sein, werden die restlichen Zeichen mit = aufgefüllt.

Anhand des GNU-Programms base32 können wir nun einen kleinen Test durchführen.

Beispiel

Da base32 jeglichen Input als Binär-Datenstrom interpretiert, werde ich der Einfachheit halber hier nur Zeichenfolgen base32-codieren. Dies ist jedoch selbstverständlich auch mit anderen Dateien(Bilder, PDF, Videos, Musik, Executables usw.)/Bitfolgen möglich.

Über den Befehl

echo "Hello World" | base32

Erhalten wir den base32-String

JBSWY3DPEBLW64TMMQFA====

mit 24 Zeichen (20 Zeichen + 4 Zeichen Padding).

Dieser kann nun durch den Befehl

echo "JBSWY3DPEBLW64TMMQFA===="|base32 -d

zurück in Hello World übersetzt werden.

Aufgaben

Der folgende base32-Strings enthält Fehler. Findet und behebt diesen, um den Originaltext zu erhalten:

MJQXGZJTGIQGS43UEBZXK4DFOIFA

Und die (schwerere) Fleißaufgabe:

JZUWG2DUEBX9HK4RAMRQXGICQMFSGI2LOM4QGW8YLONYQE-MZLINRSXEIDFNZ2GQYLMORSW4CQ=

Quelle

Der rfc3548-Standard https://tools.ietf.org/html/rfc3548.html

#steemstem #deutsch #de-stem #informatik #linux
Payout: 0.000 HBD
Votes: 391
More interactions (upvote, reblog, reply) coming soon.