2016-04-18 9 views
-1

Für ein zufälliges Projekt, ich schreibe ein Python-Programm, das nach dem Zufallsprinzip "Verschlüsselung" und "Entschlüsselung" Routinen für Strings generiert. Die resultierenden Routinen sind Mittel zuErhöhung der Anzahl der Iterationen machen das Ergebnis einer polymorphen "Verschlüsselung" etwas anders

def buildRoutines(routine_len): 
    instructions = ['+', '-', '^'] 
    pairs = {'+': '-', '-': '+', '^': '^'} 
    encrypt = "" 
    decrypt = "" 
    random.seed() 
    for _ in range(0, routine_len): 
     i = random.randrange(3) 
     j = random.randrange(100) 
     encrypt += 'e=' + 'chr((' + 'ord(e)' + instructions[i] + str(j) + ')%255)' + ';' 
     decrypt = 'e=' + 'chr((' + 'ord(e)' + pairs[instructions[i]] + str(j) + ')%255)' + ';' + decrypt 
    # Do some more stuff 
    encrypt = 'a="";e=""\nfor b in c:e=b;' + encrypt + 'a+=e;' 
    decrypt = 'd="";e=""\nfor b in a:e=b;' + decrypt + 'd+=e;' 
    return {'encrypt': encrypt, 'decrypt': decrypt} 

Bis zu rund 50-ish Iterationen funktioniert gut (routine_len) in eval() verwendet werden, aber wenn ich darüber gehen, ist das Ergebnis ein wenig weg von der ursprünglichen Zeichenfolge. Je mehr Iterationen, desto unterschiedlicher ist es. Bei 150 Iterationen sind nur ein oder zwei Zeichen falsch.

Ich habe versucht, das herauszufinden, aber ich kann nicht scheinen, es zu beheben. Es ist wahrscheinlich nur etwas wirklich Dummes, dass ich vermisse.

EDIT: Der Wert, den ich zu Mod verwendet wurde, war falsch. Danke allen, die geantwortet haben.

+1

Wenn es falsch ist, ist es falsch, unabhängig von der Anzahl der 'Iterationen' –

+0

@MitchWheat Ich würde dies annehmen, aber mit 100-ish und unter Iterationen, die Zeichenfolge sieht genau so aus wie die ursprüngliche Zeichenfolge. Wie kann es dann falsch sein? Wenn ich die Gleichheit des Ergebnisses mit der ursprünglichen Zeichenfolge (mit ==) überprüfe, gibt es True zurück, wenn sie gleich aussehen, und false, wenn sie nicht übereinstimmen. Daher funktionieren die Routinen * manchmal * bei höheren Längen nicht. – Fluffy

+2

Sind Sie sicher, dass Sie nicht "% 256" möchten und der Grund dafür, dass Sie Probleme bei hohen Iterationen haben, ist, dass Sie diesen Randfall nicht erhalten? '% 255' bedeutet, dass Ihr Maximalwert 254 ist. –

Antwort

1

Mit %255 ist Ihr Maximalwert nicht 255, sondern 254. Verwenden Sie stattdessen %256.

+0

Das war es! Vielen Dank, – Fluffy