Base-Codierung anhand von base32
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
Congratulations @maini! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOP
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Hallo,
vielen Dank für den Beitrag.
Ich stecke ja in solchen Dingen nicht sooooo tief drinnen, aber wahrscheinlich werden so doch bestimmt auch diese Hashs generiert oder?
Wie dem auch sei.
Frohe Ostern
Chapper
Hallo,
Vielen Dank für dein Feedback und deine Frage.
Der größte Unterschied bei Hashwerten liegt darin, dass aus diesen die ursprünglichen Daten nicht wiederherstellbar sind.
(Also Daten -> Hashwert ist möglich, der umgekehrte Weg Hashwert -> den ursprünglichen Daten jedoch nicht.)
Bei Base-Codierung möchten wir aus dem generierten Text auch wieder den Klartext erhalten können.
Viele Grüße und frohe Ostern.
Posted using Partiko Android
This post has been voted on by the SteemSTEM curation team and voting trail. It is elligible for support from @curie.
If you appreciate the work we are doing, then consider supporting our witness stem.witness. Additional witness support to the curie witness would be appreciated as well.
For additional information please join us on the SteemSTEM discord and to get to know the rest of the community!
Please consider setting @steemstem as a beneficiary to your post to get a stronger support.
Please consider using the steemstem.io app to get a stronger support.