Base-Codierung anhand von base32

in #steemstem6 years ago

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:

WertCodierungWertCodierungWertCodierungWertCodierung
0A9J18S262
1B10K19T273
2C11L20U284
3D12M21V295
4E13N22W306
5F14O23X317
6G15P24YPadding=
7H16Q25Z
8I17R

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

Sort:  

Congratulations @maini! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 250 upvotes. Your next target is to reach 500 upvotes.

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.