diff --git a/schattenpost.py b/schattenpost.py index ec2ea0a..bfea7d3 100644 --- a/schattenpost.py +++ b/schattenpost.py @@ -39,9 +39,18 @@ import argparse import os import struct import sys +from datetime import datetime from PIL import Image +# Unauffälliger Default-Dateiname (Screenshot-Stil passt zu PNG; echte +# Kamerafotos sind JPG). Identisch zum Web-Frontend. +CARRIER_PREFIX = "Screenshot" + + +def default_carrier_name() -> str: + return datetime.now().strftime(f"{CARRIER_PREFIX}_%Y%m%d_%H%M%S.png") + # --- Schlüsseldatei --------------------------------------------------------- KEY_MAGIC = b"SPK1" KEY_VERSION = 1 @@ -228,6 +237,7 @@ def cmd_hide(args): if not plaintext: sys.exit("[!] Leere Nachricht.") + out_path = args.output or default_carrier_name() key = read_key(args.key) if key["role"] != ROLE_SEND: sys.exit("[!] Das ist ein Empfangsschlüssel (recv.key). Zum Senden " @@ -242,11 +252,11 @@ def cmd_hide(args): ciphertext = otp_xor(plaintext, key["material"], offset) header = struct.pack(STEGO_FMT, STEGO_MAGIC, STEGO_VERSION, key["stream_id"], offset, len(ciphertext)) - embed(args.carrier, header + ciphertext, args.output) + embed(args.carrier, header + ciphertext, out_path) advance_send_offset(args.key, offset + len(plaintext)) print(f"[+] Verschlüsselt ({len(plaintext)} B) ab Sende-Offset {offset}.") - print(f"[+] Versteckt in: {args.output}") + print(f"[+] Versteckt in: {out_path}") print(f"[+] Sende-Offset im Schlüssel weitergezählt -> " f"{offset + len(plaintext)}") print("[i] Als DATEI/Dokument verschicken, nicht als Foto!") @@ -302,7 +312,9 @@ def build_parser(): h.add_argument("-i", "--infile") h.add_argument("-k", "--key", required=True, help="Dein send.key.") h.add_argument("-c", "--carrier", required=True, help="Trägerbild.") - h.add_argument("-o", "--output", required=True, help="Stego-PNG.") + h.add_argument("-o", "--output", + help="Stego-PNG (Default: unauffälliger Screenshot_-Name " + "mit Zeitstempel).") h.set_defaults(func=cmd_hide) r = sub.add_parser("reveal", help="Nachricht extrahieren + entschlüsseln.")