2017-01-24 3 views
2

Eine der 60 Zeichen langen Zeichenfolgen in this file wurde durch ein einzelnes Zeichen XOR verschlüsselt.Erkennen einer XOR-Chiffre mit einem Zeichen

Finden Sie es.

(Ihr Code von #3 helfen sollte.)

Die Herausforderung, die Zeile einer Datei zu finden ist, ist XOR verschlüsselt und was ist Kauderwelsch. Es gibt eine Zeile, die verschlüsselt ist. Jede Zeile sollte 60 Zeichen lang sein (außer dass ich eine Zeile mit 58 Zeichen gefunden habe).

Aus irgendeinem Grund lese ich 61 Zeichen auf jeder Zeile mit 59 auf der 58 Zeichen Zeile und 60 nur die letzte Zeile. Warum ist das? Ich dachte, es wäre der neue Zeilencharakter, aber als ich line[0:-1] benutzte, hatte ich keinen Erfolg beim Entschlüsseln.

Hier ist meine Python-Code:

import binascii 

def XORBreak(h): 
    en = binascii.unhexlify(h) 
    for key in range(256): 
     de = ''.join(chr(b^key) for b in en) 
     if de.isprintable(): 
      print(de) 

with open("TestFile_Challenge04_CSIS463.txt") as f: 
    for line in f: 
     XORBreak(line) 
+0

"Zeile" enthält Newline. Führe 'line.rstrip (" \ n ")' aus, um den Zeilenvorschub zu entfernen. –

+0

Oh wahr. Es tut uns leid. Ich habe die Links @AnttiHaapala –

+0

Vielen Dank @ Jean-FrançoisFabre –

Antwort

0

Zunächst einmal sollten Sie die Leerzeichen (Zeilenumbrüche und so weiter) Streifen mit .strip, zB:

for line in file 
    xor_decrypt(line.strip()) 

anstatt blind das letzte Zeichen zu entfernen einer Linie.


nun Ihr Code funktioniert fast, aber es funktioniert nicht die richtige Zeichenfolge aus einem Grund zu finden: '\n' ist nicht druckbare:

>>> '\n'.isprintable() 
False 

So isprintable auf jede Zeichenfolge, die enthält Ein Zeilenvorschub wird False zurückgeben.

Sie könnten stattdessen etwas wie any(c.isprintable() or c == '\n' for c in de) verwenden.

+0

Ich denke, dass Leerzeichen enthalten sein sollen. Sie waren in der letzten Herausforderung. –

+0

Ich sehe, was Sie sagen, aber 'XORBreak (line.rstrip ("\ n"))' das neue Zeilenzeichen herausnehmen, nicht ein beliebiges letztes Zeichen. –

Verwandte Themen