2017-02-08 5 views
0

Ich versuche, ein Brute-Force-Python-Skript zu schreiben. Ich folge diesem Tutorial link und modifizierte es an meine Bedürfnisse. die meisten der Code funktioniert gut, außer der Ausgang nur einen Ausgang 26 stattFor Schleife eine Funktion

file = args.imp 
MAX_KEY_SIZE = 26 
message = open(file) 

def getKey(): 
    key = 0 
    print("Enter the key number (1-%s)" % (MAX_KEY_SIZE)) 
    key = int(input()) 
    while True: 
      if (key >= 1 and key <= MAX_KEY_SIZE): 
        return key 

def decode(message, key): 
    translated = '' 


    for symbol in message.read(): 

      num = ord(symbol) 
      num += key 

      if num > ord('Z'): 
        num -= 26 
      elif num < ord('A'): 
        num += 26 
      translated += chr(num) 
    return translated 


key = getKey() 

for k in range(1, MAX_KEY_SIZE + 1): 
    print(k, decode(message, key)) 

ausgegeben wird:

Enter the key number (1-26) 
4 
1 BDPWCCONVESDKLOOVACAXKYFJJBGDCSLRRPTYYYIBQNOXLZYHCHCNZCRM 
2 
3 
4 
5 
6 etc to 26 

Antwort

1

Sobald Sie read() aufrufen, liest es die gesamte Datei durch und lässt den Lesecursor am Ende der Datei stehen. Wenn Sie eine Datei mit dieser Situation lesen, wird Ihnen '' (leere Zeichenfolge) zurückgegeben. Das ist der Grund, dass Sie nur bei der ersten Iteration ausgegeben werden und sich als leer ausruhen.

Sie können suchen (Cursor am Anfang der Datei zeigen), wie von @schwobaseggl beantwortet.

oder alle Datei einmal am Anfang lesen,

message = open(file).read() 

# code here 

def decode(message, key): 
    translated = '' 
    for symbol in message: 
      num = ord(symbol) 
      num += key 
      if num > ord('Z'): 
        num -= 26 
      elif num < ord('A'): 
        num += 26 
      translated += chr(num) 
    return translated 
+0

funktioniert das natürlich ist die intelligente Art und Weise;) – schwobaseggl

+0

Vielen Dank, dass Werke –

2

Sie keine Datei immer wieder einfach so lesen kann. Sie müssen die Position des Dateiobjekts an den Anfang zurücksetzen. Andernfalls gibt message.read() nur eine leere Zeichenfolge zurück. Fügen Sie

message.seek(0) 

an den Anfang Ihrer decode-Funktion.

+0

Danke, dass –

Verwandte Themen