Python Problem?
Instructions: I will send you a list of words that have been encoded with a randomized rotation cipher and then encoded in base64 after this message. The base64 cipher text has been encoded with a randomized rotation cipher. Send back the list of decoded words separated by a space in the order they come in less than 4 seconds for your flag!
To find out which words are valid words, use the 'word_list.txt' dictionary.
iBa4ZDQE lEIvA3IKmNq2AwD= QNBzLfvGwy== kBXpAtjY aRefOD1xzSd= YUx5T3BDeEw= TPTbN2rWuOD6OQ9AyfbjMRS= g0MsU3kReH1l M0laKKTIpzM= v0ZePhxESOT5 TPM1PicIzP4= fHaqUJaY oSTaE2JKMJF5JbvG iBnqWtXPF1neCNHJ rKLlJMHLr1LmKG== ye1tMAZCvfHiKhjFu1a= gHXmUIHABS== Z1ZpWmVMdEN2Umk= G0wdXEoClH==
Ich brauche einen Code, der nicht nur mit diesen verschlüsselten Wörtern funktioniert sondern mit allen.
Naja wo hakt es denn? Beim allgemeinen Plan? Bei der Implementation vom Knacken von bestimmten Teilen?
Das Problem ist, dass der code bei jedem Neuladen der Website ändert. Ich brauche eine Art Entschlüsslungsgenerator, um jede Art von Code in Sekunden zu entschlüsseln.
Ja, das brauchst du. Und das müsstest du jetzt (selber) schreiben. Wo hakt es dabei? Was für ein Problem hast du bei der Implementierung?
Ich kann es einfach nicht... und wäre sehr froh wenn mir jemand helfen könnte.
4 Antworten
4 Sekunden sind doch eine Ewigkeit, in der man locker alle Kombinationen ausprobieren kann. Allerdings ist die Formulierung „encoded with a randomized rotation cipher“ ziemlich schwammig.
Wenn ich Groß- und Kleinbuchstaben separat rotiere und alle anderen Zeichen belasse, liefert die Eingabe „iBa4ZDQE“ nur für rot-19 einen Base64-Code „bUt4SWJX“, der zu Asciizeichen „mKxIbW“ führt. Und das ergibt mit keiner Rotation ein bekanntes Wort.
Wie ist das Rotieren gemeint, und wie sieht die Wortliste aus? Ohne diese Information wirst Du keinen brauchbaren Code bekommen.
import base64
# Funktion zum Dekodieren des Base64-codierten Textes
def base64_decode(encoded_text):
decoded_bytes = base64.b64decode(encoded_text)
return decoded_bytes.decode('utf-8')
# Funktion zum Dekodieren des Textes mit einem zufälligen Rotationschiffre
def rotate_decrypt(ciphertext, rotation):
decrypted_text = ""
for char in ciphertext:
if char.isalpha():
shifted = ord(char) - rotation
if char.islower():
if shifted < ord('a'):
shifted += 26
elif char.isupper():
if shifted < ord('A'):
shifted += 26
decrypted_text += chr(shifted)
else:
decrypted_text += char
return decrypted_text
# Die verschlüsselten Wörter in Base64 codiert
encoded_words = [
"iBa4ZDQE",
"lEIvA3IKmNq2AwD=",
"QNBzLfvGwy==",
"kBXpAtjY",
"aRefOD1xzSd=",
"YUx5T3BDeEw=",
"TPTbN2rWuOD6OQ9AyfbjMRS=",
"g0MsU3kReH1l",
"M0laKKTIpzM=",
"v0ZePhxESOT5",
"TPM1PicIzP4=",
"fHaqUJaY",
"oSTaE2JKMJF5JbvG",
"iBnqWtXPF1neCNHJ",
"rKLlJMHLr1LmKG==",
"ye1tMAZCvfHiKhjFu1a=",
"gHXmUIHABS==",
"Z1ZpWmVMdEN2Umk=",
"G0wdXEoClH=="
]
# Dekodierung des Base64-codierten Textes
decoded_words = [base64_decode(word) for word in encoded_words]
# Verschiedene Rotationen ausprobieren, um den richtigen Text zu finden
for rotation in range(1, 26):
print(f"Rotation {rotation}: ", end="")
for word in decoded_words:
decrypted_word = rotate_decrypt(word, rotation)
print(decrypted_word, end=" ")
print()
Aber ich möchte nicht, dass es nur für diese wörter funktioniert.
Es gibt keine Dekodierung, die mit allem funktioniert.
Du schreibst dir einen Code, der Rotationschiffre entschlüsselt und einen, der base64-decodet.
Und dann noch eine Funktion, die prüft ob das Entschlüsselte korrekt ist
Dann baust du zwei Schleifen folgendermaßen:
for i in range(len(alphabeth)):
decoded_0 = decode_rotation_cipher(text, i);
decoded_1 = base64_decode(decoded_0);
for j in range(len(alphabeth)):
decoded_2 = decode_rotation_cipher(decoded_1, j);
if check(decoded_2):
return decoded_2;