2017-04-11 2 views
0

Durch einige CTFs Aufgaben bin ich auf interessante Herausforderung gestoßen. Das folgende Programm wird eine Flag-Textdatei aufnehmen, die eine einzelne Zeile zufälliger alphanumerischer Zeichen (Flag) enthält. Wird es jedoch zufällige Buchstaben Rotation laufen und einen String zurückKryptografie Pseudo Random

import random,string 

flag = "FLAG:"+open("flag", "r").read()[:-1] 
encflag = "" 
random.seed("random") 
for c in flag: 
    if c.islower(): 
    #rotate number around alphabet a random amount 
    encflag += chr((ord(c)-ord('a')+random.randrange(0,26))%26 + ord('a')) 
    elif c.isupper(): 
    encflag += chr((ord(c)-ord('A')+random.randrange(0,26))%26 + ord('A')) 
    elif c.isdigit(): 
    encflag += chr((ord(c)-ord('0')+random.randrange(0,10))%10 + ord('0')) 
    else: 
    encflag += c 
print "Unguessably Randomized Flag: "+encflag 

Ausgang: BNZQ:1l36de9583w5516fv3b8691102224f3e

Jeder kann dies erklären kann gelöst werden?

+0

Ich denke, Sie könnten versuchen, es umzukehren, da Sie den 'seed' (" random ") und einen Teil der unverschlüsselten Zeichenfolge (" FLAG: ") kennen. Wenn ich die Ausgabe sehe, stelle ich mir vor, dass der verschlüsselte Text ein md5 Hash (32 untere alphanumerische Zeichen) sein soll. –

+0

@tmadam OK, da es alle Ziffern und Kleinbuchstaben ist und mehr Ziffern als Kleinbuchstaben hat, gebe ich Ihnen wahrscheinlich das Ergebnis von 32 Hexadezimalzahlen und könnte daher ein Hash-Wert sein (ich habe hier kein Python). –

+1

* "Jeder kann erklären, dass das gelöst werden kann?" * - Was ist das Problem hier? Ich sehe nicht, was da zu lösen ist. Möchten Sie es rückgängig machen? –

Antwort

1

Da der Zufallswert gesetzt ist, sollte er den gleichen Strom von Bereichen erzeugen. So können Sie die gleiche Funktion verwenden, aber Sie sollten ändern:

encflag += chr((ord(c)-ord('a')+random.randrange(0,26))%26 + ord('a')) 

in

encflag += chr((ord(c)-ord('a')-random.randrange(0,26))%26 + ord('a')) 
//    change here -^ 

für alle drei Linien.

Dies sollte funktionieren - bis jemand an der Stelle von random zumindest einen anderen, effizienteren Algorithmus setzt, ändert sich die Handhabung des Saatgutes usw.


Dies ist eine schlechte Stromchiffre random implementiert , benutze es nicht für etwas Ernstes. Und da die Verwendung eines nicht-kryptografischen RNG anstelle einer Stream-Chiffre selbst für Krypto-Demo-Code ziemlich dumm ist, würde ich sie auch nicht für Lernzwecke verwenden.

+0

Um genau zu sein, ist dies eine Variante der Vigenère-Chiffre mit einem pseudozufällig generierten Schlüssel so lang wie der Klartext. –