Hier ist ein Verschlüsselungsalgorithmus, der auf hexadezimalen Zeichenfolgen basiert und durch XOR-Verknüpfung des angegebenen Klartextes N- mal implementiert wird , wobei N die Länge von N ist. Der Haken ist jedoch, dass jede nächste XOR-Operation ausgeführt wird, nachdem der aufeinanderfolgende Nur-Text- Eintrag nach rechts verschoben wurde . Eine Beispieloperation ist unten gezeigt:

Angenommen, das Passwort ist 'abcd', dann wird der hexadezimale Text als a1d0a1d berechnet, indem das Passwort N-mal mit sich selbst XOR- verknüpft wird, in diesem Fall 4-mal.

Ebenso, wenn das Passwort '636f646572' lautet , dann



653cae8da8edb426052 ist der hexadezimale Text.

Die Problemstellung besteht also darin, einen Entschlüsselungsalgorithmus (in einer beliebigen Programmiersprache) zu erstellen und den Klartext aus der angegebenen hexadezimalen Zeichenfolge abzuleiten.

Beispiele:

Eingabe: a1d0a1d
Ausgabe: abcd
Sobald abcd codiert ist, wird a1d0a1d zurückgegeben
Eingabe: 653cae8da8edb426052
Ausgabe: 636f646572

Ansatz: Der Hauptbestandteil beim Ver- und Entschlüsseln liegt in den Eigenschaften von XOR . XOR ist eine bitweise Operation , bei der das Ergebnis ist 0 , wenn die beiden möglichen Eingaben sind gleiche aber 1 , wenn die Eingänge sind unterschiedlich . Die XOR-Tabelle dient als Referenz:

Eingänge Ausgänge
X. Y. Z.
0 0 0
0 1 1
1 0 1
1 1 0

Eine wichtige und nützliche Eigenschaft von XOR , die sehr populär in der Kryptographie ist, dass im Falle von mehreren XOR - Verknüpfung von Zahlen (sagen M Zahlen), wenn wir nur das wissen , M - 1 Nummern (eine Unbekannte ist) zusammen mit dem XOR - Ergebnis dann, wir kann die fehlende Zahl leicht berechnen, indem die bekannten Zahlen und das XOR-Ergebnis XOR-verknüpft werden. Diese Eigenschaft wird mit den folgenden Hexadezimalzahlen erläutert:

Wir werden die oben aufgeführte Eigenschaft im Verlauf dieses Problems am häufigsten verwenden. Wenn wir uns nun das Verschlüsselungsdiagramm von 'abcd' an der Basis ansehen, ist es nur das wiederholte XORing der Ziffern. Die Ziffer ganz rechts ist d und die Ziffer ganz rechts von 'abcd' ist ebenfalls d, sodass die letzte Ziffer von Klartext und Hexstring gleich ist . Die nächste Ziffer ist 1, die durch XOR-Verknüpfung der zweiten rechten Ziffer von abcd und der vorherigen Ziffer berechnet wird, dh 1 = d ^ c unter Verwendung der Eigenschaft, von der wir wissen, dass die Klartextziffer als d ^ 1 = c abgeleitet werden kann . In ähnlicher Weise ist die nächste Ziffer eine, die von gefunden wirdd ^ c ^ b = a . Wir müssen dies nur bis zur Hälfte der Hex-Zeichenfolge tun, da der Rest symmetrisch ist und sie nicht benötigt werden .

Nachfolgend finden Sie die Implementierung des obigen Ansatzes:

  
hex_s = '653cae8da8edb426052'
  
plain = '' 
  
x = 0
  
l = len(hex_s) 
  
for i in range(l - 1, int(l / 2) - 1, -1): 
      
    
    y = x^int(hex_s[i], 16) 
      
    
    x = x^y 
    plain = hex(y)[-1] + plain 
      
print(plain) 
Ausgabe:
636f646572