• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Binäre Daten enkodiert in Hexadezimal in Base64 enkodieren

Commodo

NGBler

Registriert
17 Mai 2014
Beiträge
151
Ich hab eine Aufgabe die ich partout nicht lösen kann und für die auch nichts gescheitest online finde.

Gegeben sind die folgende Binärdaten enkodiert in Hexadezimal: AE 81 4B und eine Tabelle für die Base64-Kodierung (Kurz zusammengefasst mit Zahl 1-63 = Buchstabe A-z,0-9, +/, (pad) =). Enkodieren Sie die Binärdaten in Base64.

Wie muss man hier vorgehen damit man das mit Stift und Papier alleine lösen kann?

Meine Idee war Hexa -> Binär -> Base64 aber dann müsste die Kodierungstabellen auswendig lernen und die Base64-Tabelle wäre dann ja eigentlich sinnlos? Hat da jemand eine Lösung oder einen Ansatz?
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.562
Sagen wir so "F" ist in Hex der höchste Wert der durch ein 4 Binärstellen abgedeckt werden kann, ein halbes(!) Byte, 4 Bit.
F = 1111 (maximum)

Wenn man das vorrechnet:
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
usw.

bis 9, dann kommt A (Hex!) bis F (Hex) (https://de.wikipedia.org/wiki/Hexadezimalsystem)

und F ist wie gesagt 1111.

Du musst also "nur" die Stellen bis zum A = 10 in Hex = 10 Schritte "binär" hochzählen, wie in dem Beispiel.
Hier gibt es auch eine Umrechnungstabelle, die das verdeutlicht: http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm#hexbin

Man geht also von rechts nach links, wobei man anfängt bei: 0000 -> 0001 -> 0010 -> 0011 -> 0100 -> 0101 -> 0110 -> 0111 -> 1000 usw.

Eigentlich könnte man über Hexadezimal auch auf einen Dezimalwert kommen, aber das wird in diesem Fall ja nicht gefragt, man könnte es machen, aber lassen wir das mal kurz weg.

Um jetzt von Binär ins Dezimalsystem zu kommen, nehmen wir den Binärwert:
sagen wir: 0101 und den zweiten Teil 1101, also 0101 1101 (ein Byte)

Für jede Stelle rechnet man dann mal 0 oder 1 * 2 (zwei als Basis) hoch Stelle in der Binärfolge, ganz rechts angefangen hat die Stelle die Potenz 0.

Daraus ergibt sich:
0 = 0 * 2 hoch 7 = 0
1 = 1 * 2 hoch 6 = 2*2*2*2*2*2 = 64
0 = 0 * 2 hoch 5 = 0
1 = 1 * 2 hoch 4 = 2*2*2*2 = 16

das war der erste Block, jetzt der zweite Teil:
1 = 1 * 2 hoch 3 = ??
1 = 1 * 2 hoch 2 = ??
0 = 0 * 2 hoch 1 = 0
1 = 1 * 2 hoch 0 = 2


das rechnet man zusammen und erhält die Dezimalzahl...

Allerdings sagt: https://de.wikipedia.org/wiki/Base64#Vorgehen_bei_der_Kodierung
Das drei Byte (24 Bit) genommen werden zur Kodierung, die in 6 Stellen (Bit) in einen Block unterteilt werden:
Also um bei dem Beispiel zu bleiben, bei "0101 1101" hättest du zur Kodierung eines Zeichens "0101 11" der Rest "01" würde mit im nächsten Block sein. 01 hat dann aber auch weiterhin die Wertigkeit hoch 1 und hoch 0 in der Rechnung des nächsten Blocks von 6 Bit. gefolgt von hoch 7 usw.
Bedenke aber, bei der Berechnung wird die "volle Potenz" genommen: also "0101" hat immer noch (hoch 7, hoch, 6, hoch 5, hoch 4 usw...) als Wert mit Basis von 2.

In deiner Tabelle die gegeben ist, musst du nun einfach das Ergebnis durch das jeweilige Zeichen ersetzen:
https://de.wikipedia.org/wiki/Base64#Base64-Zeichensatz

0 = A
25 = Z

26 = a
51 = z

52 = 0
53 = 1
...
61 = 9

bis hier ist es logisch, Großbuchstaben, Kleinbuchstaben, 0-9...

62 = +
63 = /

Und + und / .

Wenn du den Wert 25 Dezimal hast, hast du ein "Z", bei 26 das kleine "a"....

Edit:
Ich sehe gerade auch, die Seite hier hat eine sehr gute Beschreibung:
http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm#hexbin

Einfach mal den HexWert eintragen und "Vorrechnen" lassen ;)

Weil 255 Schritte bei FF als Hexwert durchzugehen um auf einen Binärwert zu kommen, ist vielleicht etwas mühselig :D
 
Zuletzt bearbeitet:

Jester

★★★★☆ (Kasparski)

Registriert
1 Dez. 2014
Beiträge
6.059
Ort
Code Azure
Deine Idee Hex -> Bin -> Base64 ist korrekt.
$AE = 174 = 1*128 + 0*64 + 1*32 + 0*16 + 1*8 + 1*4 + 1*2 + 0*1 -> 10101110 *
$81 = 129 = 1*128 + 0*64 + 0*31 + 0*16 + 0*8 + 0*4 + 0*2 + 1*1 -> 10000001
$4B = 75 = 0*128 + 1*64 + 0*31 + 0*16 + 1*8 + 0*4 + 1*2 + 1*1 -> 01001011

Also ist der Bitstream 10101110 10000001 01001011. Dese 3 Byte werden in vier 6-Bit-Chunks aufgeteilt:
101011 101000 000101 001011

Für die Base64-Codierung musst Du wie Split schon sagte nur wissen, dass 0-25 = A-Z, 26-51 = a-z, 52-61 = 0-9, 62 = + und 63 = /

101011 = 43 = r
101000 = 40 = o
000101 = 5 = F
001011 = 11 = L

Oh LOL es ist roFL :)


* Edit: um manuell eine Dezimalzahl aus einem hexadazimalen Byte zu erhalten, gehe so vor (Bsp. $AE):
1. Stelle multipliziert mit 16 plus 2. Stelle
$A = 10, $E = 14, also 10*16 + 14 = 174

Umwandlung in eine Binärzahl:
erstes Bit: ist die Zahl größer oder gleich 128? Ja = 1, nein = 0; wenn ja, Rest = Zahl - 128, sonst ist Rest = Zahl
zweites Bit: ist Rest größer oder gleich 64? Ja = 1, nein = 0, wenn ja, Rest = Rest - 64, sonst ist Rest = Rest
usw.

Umwandlung der 6-Bit-Chunks (Bsp. 101011):
1*32 + 0*16 + 1*8 + 0*4 + 1*2 + 1*1 = 43 -> r
 
Zuletzt bearbeitet:
Oben