it-swarm.com.de

Warum endet eine verschlüsselte Nachricht manchmal mit "=="

Als Programmierübung muss ich eine Nachricht entschlüsseln. Die einzigen Hinweise, die ich habe, sind anscheinend:

  • Die codierte Nachricht enthält nur Base64-Zeichen
  • eine n-Buchstaben-Sequenz (n in 1,4,7,10) gibt eine verschlüsselte Nachricht mit "==" zurück.
  • eine n-Buchstaben-Sequenz (n in 2,5,8,11) gibt eine verschlüsselte Nachricht mit "=" zurück.
  • eine n-Buchstaben-Sequenz (n in 3,6,9,12) gibt eine verschlüsselte Nachricht ohne ein bestimmtes Zeichen zurück.

Ich möchte keine Lösung, ich frage mich nur, ob diese Abfolge von Vorkommen für das Gleichheitszeichen einen Hinweis liefert oder nicht.

Vielen Dank.

23
czioutas

Die Zeichen = beziehen sich auf die Länge der Zeichenfolge, die in Base64 codiert wird. Im Wesentlichen wird in der wahrscheinlich am häufigsten verwendeten Form von Base64 = als Auffüllzeichen verwendet, um sicherzustellen, dass der letzte Block ordnungsgemäß dekodiert werden kann.

Base64 ist keine Verschlüsselung - es gibt kein Versteck darin - wird jedoch häufig verwendet, um zu ermöglichen, dass Binärdaten nur in Textform gesendet werden. Alle in Base64 verwendeten Zeichen werden korrekt eingefügt und können über eine Tastatur ohne Modifizierertasten über die Umschalttaste hinaus eingegeben werden.

53
Matthew

Wie oben erwähnt, ist Base64 keine Verschlüsselung, sondern eine Codierung. Wie Sie unter RFC sehen können, das den Standard spezifiziert hat, funktioniert base64 folgendermaßen.

  • Sie haben einen Strom von Zeichen s, der Länge n.
  • Sie lesen 3 8-Bit-Werte aus dem Stream (jetzt haben Sie insgesamt 24 Bit = 3 Byte).
  • Sie teilen diese 24 Bits in 4 Gruppen zu je 6 Bits auf
  • Mithilfe der Tabelle des Base 64-Alphabets codieren Sie jede der 6-Bit-Gruppen in das Base64-Äquivalent

Jetzt besteht die Möglichkeit, dass Sie das Ende des Streams erreichen und keine 24-Bit-Gruppe haben (s mod 6! = 0) . In diesem Fall fügen Sie am Ende Ihrer Eingabe Nullen hinzu, bis Sie eine ganzzahlige Anzahl von 6-Bit-Gruppen haben.

Da Ihr Eingabestream ASCII codiert) ist und daher aus 8-Bit-Zeichen besteht, gibt es nur zwei Fälle, in denen Sie im obigen Szenario enden.

1) Sie haben 8 Bits in der letzten Gruppe

2) Sie haben 16 Bits in der letzten Gruppe

Im ersten Fall werden 4 Nullen hinzugefügt (was 12 Bits ergibt) und die Ausgabe besteht aus zwei Zeichen (2 * 6 Bits = 12 Bits), die basierend auf dem Alphabet codiert sind, und zwei "=" Auffüllzeichen

Im zweiten Fall würden 2 Nullen hinzugefügt (was insgesamt 18 Bits ergibt) und die Ausgabe würde drei Zeichen (3 * 6 Bits = 18 Bits) und ein Auffüllzeichen "=" sein.

So erhalten Sie manchmal ein, zwei oder kein "=" am Ende des codierten Textes. Für weitere Informationen sollten Sie unbedingt das RFC lesen, das diesen Standard und den dazugehörigen Wikipedia-Eintrag definiert.

3
G. Kaklam.

Es gibt mehrere andere Codierungssysteme, die das Zeichen = Verwenden. Einige davon sind:

ESAB46 (BASE64 rückwärts)

ATOM128

MEGAN35

FERON74

Wie bereits erwähnt, ist = Füllstoff/Puffer, um dem Uncodierer die Länge mitzuteilen. Dies ist insbesondere der Grund, warum Kryptologen nach einem besseren Weg suchen, um Pufferung durchzuführen, da = Ein totes Werbegeschenk ist.

1
Chad Baxter