ich habe ein kleines Skript geschreiben was mit einen Text verschlüsseln soll. Das Verschlüsseln klappt auch schon soweit ich das beurteilen kann. Nun habe ich aber zwei Probleme.
1. Problem ist die Ausgabe der Bytes, das Terminalfenster wandelt diese teilweise automatisch in druckbare Zeichen um, gibt es einen Weg das zu verhindern? Eventuell selber die Zeichen wieder umwandeln und dann später zurückwandeln?
2. Problem ist das entschlüsseln. Ich weiß nicht wie ich es hinbekomme, dass wenn ich über einen input die Bytes eingebe, diese auch so wie ich sie eingebe wieder zur weiterverarbeitung im Programm nutzen kann.
Sonstige Verbesserungsvorschläge sind auch gerne gesehen.
Code: Alles auswählen
import random
import string
CHARSET = list(string.ascii_lowercase) + list(string.ascii_uppercase) + list(string.digits) + list(string.punctuation)
CHAR_TO_REPLACECHARS = {ord('ä'):'ae', ord('ö'):'oe', ord('u'):'ue', ord('ß'):'ss'}
def generate_random_key(lenght):
return ''.join(random.choice(CHARSET) for _ in range(lenght))
def encrypt_text(message):
key = generate_random_key(len(message))
encrypt_message = bytes([byte ^ key.encode()[i] for i, byte in enumerate(message.encode())])
return encrypt_message, key
def decrypt_text(encrypted_text, key):
return bytes([byte ^ key.encode()[i] for i, byte in enumerate(encrypted_text)]).decode('ascii')
def main():
message = input("Nachricht: ").translate(CHAR_TO_REPLACECHARS)
encrypt_message, key = encrypt_text(message)
print(f"Message:\n{encrypt_message}\n") #die Message würde ich gerne herauskopieren können und dann...
print(f"Key:\n{key}\n")
#...hier wieder über einen Input eingeben können (mit dem Key), sodass die Nachricht entschlüsselt wird
decrypt_message = decrypt_text(encrypt_message, key)
print(f"Decrypted message:\n{decrypt_message}")
if __name__ == "__main__":
main()