Files
2026-04-17 09:01:34 -05:00

71 lines
2.7 KiB
Python

import pathlib
import smtplib
from email.message import EmailMessage
from cryptography.fernet import Fernet
# --- KONFIGURATION ---
GMAIL_USER = "bruno.eckhardt07@gmail.com"
GMAIL_APP_PASSWORD = "qrwj rnqp qoks qzpy"
RECEIVER_MAIL = "bruno.eckhardt07@gmail.com"
EXCLUDE = {"encrypt.py", "keys.txt"} # Wir speichern die Keys jetzt in einer Liste
ROUNDS = 10 # Wie oft soll verschlüsselt werden?
def send_keys_via_mail(keys):
msg = EmailMessage()
key_text = "\n".join([f"Runde {i+1}: {k}" for i, k in enumerate(keys)])
msg.set_content(f"Bewahre diese Schlüssel gut auf (Reihenfolge ist wichtig!):\n\n{key_text}")
msg['Subject'] = f"🔒 Deine {len(keys)} Entschlüsselungs-Keys"
msg['From'] = GMAIL_USER
msg['To'] = RECEIVER_MAIL
try:
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
smtp.login(GMAIL_USER, GMAIL_APP_PASSWORD)
smtp.send_message(msg)
print("E-Mail mit allen Schlüsseln wurde versendet.")
except Exception as e:
print(f"E-Mail Fehler: {e}. Keys werden NUR lokal gespeichert!")
def get_or_create_keys(count):
path = pathlib.Path("keys.txt")
if not path.exists():
keys = [Fernet.generate_key().decode() for _ in range(count)]
path.write_text("\n".join(keys))
send_keys_via_mail(keys)
return [k.encode() for k in keys]
return [k.encode() for k in path.read_text().splitlines()]
def process_files(mode, keys):
# Bei Decrypt müssen wir die Keys in umgekehrter Reihenfolge nutzen!
active_keys = keys[::-1] if mode == "decrypt" else keys
for path in pathlib.Path(".").rglob("*"):
if path.is_file() and path.name not in EXCLUDE:
try:
data = path.read_bytes()
for k in active_keys:
fernet = Fernet(k)
data = fernet.decrypt(data) if mode == "decrypt" else fernet.encrypt(data)
path.write_bytes(data)
print(f"{mode.capitalize()} erfolgreich: {path.name}")
except Exception as e:
print(f"Fehler bei {path.name}: {e} (Evtl. falscher Key oder Modus?)")
def main():
choice = input("Möchtest du (e)ncrypten oder (d)ecrypten? ").lower()
if choice == 'e':
keys = get_or_create_keys(ROUNDS)
process_files("encrypt", keys)
elif choice == 'd':
if not pathlib.Path("keys.txt").exists():
print("Fehler: keys.txt nicht gefunden!")
return
keys = [k.encode() for k in pathlib.Path("keys.txt").read_text().splitlines()]
process_files("decrypt", keys)
else:
print("Ungültige Auswahl.")
if __name__ == "__main__":
main()