# Cryptor (AES-256) — Manual

> Vollständige Funktionsbeschreibung von Cryptor: AES-256-GCM, PBKDF2 mit 300.000 Iterationen, Ausgabeformat, alle Buttons, Datei-Operationen und Betriebsgrenzen.

Source: https://www.jpkc.com/db/tools/cryptor/manual/

Zurück zur Übersicht: [Cryptor (AES-256)](https://www.jpkc.com/db/tools/cryptor/) · Tool live öffnen: [www.jpkc.com/tools/cryptor/](https://www.jpkc.com/tools/cryptor/)

Dieses Manual beschreibt **Cryptor (AES-256)** vollständig: wie die Oberfläche aufgebaut ist, welche Krypto-Parameter exakt gelten, was jeder Button tut und welche Grenzen der Browser-Betrieb mit sich bringt. Die Oberfläche des Tools ist auf Englisch — die Labels werden hier deshalb in ihrer englischen Original-Schreibweise genannt (mit deutscher Erläuterung), damit du dich im echten Interface zurechtfindest.

## Aufbau der Oberfläche

Cryptor besteht aus zwei Spalten:

- **Input** (links) — ein Passwortfeld (**Password**) mit Generieren-Knopf und ein großes Textfeld (**Message**) für den Klartext oder das Chiffrat.
- **Encryption** und **File Operations** (rechts) — die Aktionsknöpfe.

Das Passwortfeld ist ein normales Textfeld, sein Inhalt ist also **sichtbar** (nicht als Punkte maskiert). Der Hinweis darunter — „Used for both encryption and decryption" — bringt das Kernprinzip auf den Punkt: Es gibt nur ein Passwort, und es wird sowohl zum Verschlüsseln als auch zum Entschlüsseln gebraucht. Geht es verloren, ist das Chiffrat nicht mehr lesbar.

Das **Message**-Feld dient doppelt: Hier steht entweder der Klartext, den du verschlüsseln willst, oder das Chiffrat, das du entschlüsseln willst. Das Ergebnis einer Aktion ersetzt jeweils den Feldinhalt.

## Ablauf

Der typische Ablauf hat drei Schritte:

1. **Passwort eingeben** — selbst tippen oder über den Schlüssel-Knopf generieren lassen.
2. **Text eingeben** — Klartext (zum Verschlüsseln) oder Chiffrat (zum Entschlüsseln) in das Message-Feld.
3. **Aktion wählen** — **Encrypt** oder **Decrypt**. Das Ergebnis erscheint im selben Feld und kann kopiert oder gespeichert werden.

Beim Laden prüft Cryptor, ob der Browser die Web-Crypto-API unterstützt. Fehlt sie, erscheint eine Fehlermeldung und die Encrypt-/Decrypt-Knöpfe bleiben deaktiviert.

## Krypto-Parameter im Detail

Die moderne Verschlüsselung von Cryptor nutzt die **Web-Crypto-API** des Browsers (`crypto.subtle`). Die Parameter sind fest verdrahtet und entsprechen gängigen Empfehlungen.

### AES-256-GCM

Algorithmus ist **AES** mit **256 Bit Schlüssellänge** im **GCM**-Modus (Galois/Counter Mode). GCM ist eine *authentifizierte* Verschlüsselung (AEAD): Neben dem Chiffrat entsteht ein **Authentifizierungs-Tag** von **128 Bit**. Beim Entschlüsseln prüft der Browser dieses Tag — stimmt es nicht (falsches Passwort, manipuliertes oder beschädigtes Chiffrat), schlägt die Entschlüsselung fehl, statt fehlerhaften Klartext auszugeben.

### PBKDF2-Schlüsselableitung

Aus deinem Passwort wird der eigentliche AES-Schlüssel über **PBKDF2** abgeleitet, mit der Hash-Funktion **SHA-256** und **300.000 Iterationen**. Diese Iterationszahl folgt einer OWASP-Empfehlung und ist bewusst hoch: Sie verlangsamt jeden einzelnen Ableitungsversuch und macht damit das systematische Durchprobieren von Passwörtern teuer.

### Salt und IV

Vor jeder Verschlüsselung erzeugt Cryptor zwei Zufallswerte aus dem kryptografisch sicheren Generator des Browsers (`crypto.getRandomValues`):

- einen **Salt** von **16 Byte** (128 Bit) — er fließt in die PBKDF2-Ableitung ein, sodass dasselbe Passwort jedes Mal einen anderen Schlüssel ergibt;
- einen **IV** (Initialisierungsvektor) von **12 Byte** (96 Bit) — die für GCM empfohlene Länge.

Weil Salt und IV bei jedem Lauf neu zufällig sind, ergibt **derselbe Text mit demselben Passwort jedes Mal ein anderes Chiffrat**. Das ist gewollt und ein Zeichen korrekter Kryptografie.

### Ausgabeformat

Das Chiffrat wird als ein einziger **Base64**-String ausgegeben. Vor der Base64-Kodierung werden die Bestandteile in dieser Reihenfolge aneinandergehängt:

```
Base64( salt[16 Byte] + iv[12 Byte] + ciphertext + tag[16 Byte] )
```

Salt und IV stehen also **mit im Chiffrat** — sie müssen nicht geheim sein und werden zum Entschlüsseln gebraucht. Das Authentifizierungs-Tag (16 Byte) hängt der GCM-Modus an das Chiffrat an. Zum Entschlüsseln zerlegt Cryptor den Base64-Block wieder in Salt, IV und Daten, leitet mit dem Salt den Schlüssel ab und entschlüsselt. Ist der Block zu kurz (kürzer als Salt + IV + Tag + mindestens ein Byte), wird er als ungültig abgewiesen.

## Die Aktionen im Detail

### Encrypt

Verschlüsselt den Inhalt des Message-Feldes mit dem Passwort. Vorbedingungen, die das Tool prüft:

- Es muss ein Text vorhanden sein (sonst Hinweis „Please enter a message to encrypt.").
- Es muss ein Passwort vorhanden sein (sonst „Please enter a password.").
- Das Passwort muss **mindestens 8 Zeichen** lang sein (sonst „Password should be at least 8 characters.").

Während der Berechnung zeigt der Knopf einen Ladezustand. Danach steht im Message-Feld der Base64-Block, und eine Meldung bestätigt „Message encrypted with AES-256-GCM.".

### Decrypt

Entschlüsselt den Inhalt des Message-Feldes mit dem Passwort. Auch hier müssen Text und Passwort vorhanden sein. Cryptor erkennt dabei **automatisch das Format**:

- Beginnt das Chiffrat mit der Zeichenfolge `U2FsdGVkX1` (das ist Base64 für `Salted__`), behandelt das Tool es als **Legacy-Format** und entschlüsselt es über die mitgelieferte Altbibliothek (siehe unten).
- Andernfalls wird es als modernes AES-256-GCM-Chiffrat über die Web-Crypto-API entschlüsselt.

Schlägt die Entschlüsselung fehl — etwa wegen falschen Passworts oder beschädigter Daten —, erscheint die Meldung „Decryption failed. Check your password." und der Feldinhalt bleibt unverändert.

### Generate secure password

Der Knopf mit dem Schlüssel-Symbol neben dem Passwortfeld erzeugt ein **64 Zeichen langes Zufallspasswort** und trägt es ein. Das Passwort kommt von einem kleinen Server-Endpunkt, der es mit PHPs kryptografisch sicherem `random_int` aus einem Zeichensatz aus Klein- und Großbuchstaben, Ziffern und einer Reihe von Sonderzeichen (`, . - ; _ # + * ! § $ % & / ( ) = ?`) zusammensetzt. Übertragen wird dabei nichts von deinen Daten — der Endpunkt liefert nur die Zeichenkette zurück.

Der zugrunde liegende Endpunkt akzeptiert eine Länge von **1 bis 64** Zeichen (Aufruf-Schema `/tools/cryptor/pw/{länge}/`); der Knopf in der Oberfläche fordert immer die maximale Länge 64 an. Es handelt sich um eine reine Hilfsfunktion zur Passwort-Erzeugung, kein dokumentiertes öffentliches API.

### Copy

Kopiert den aktuellen Inhalt des Message-Feldes in die Zwischenablage. Ist das Feld leer, erscheint der Hinweis „Nothing to copy.".

### Open, Save, Clear

Die Karte **File Operations** bündelt den Dateiumgang:

- **Open** öffnet einen Datei-Dialog (akzeptiert `.txt`, `.enc`, `.aes`) und lädt den Textinhalt der gewählten Datei als UTF-8 in das Message-Feld.
- **Save** speichert den aktuellen Feldinhalt als Textdatei mit dem Namen `encrypted.txt` (Download über den Browser). Ist das Feld leer, kommt „Nothing to save.".
- **Clear** leert **sowohl** das Message-Feld **als auch** das Passwortfeld. Praktisch, um nach getaner Arbeit keine sensiblen Reste stehen zu lassen.

### Drag-and-drop

Du kannst eine Datei direkt auf das Message-Feld **ziehen und fallen lassen**; ihr Textinhalt wird dann (wie bei **Open**) als UTF-8 geladen. Während du eine Datei über das Feld ziehst, hebt es sich optisch hervor.

## Legacy-Format (gibberish-aes)

Aus Kompatibilitätsgründen liefert Cryptor eine Altbibliothek (`gibberish-aes`) mit — aber **nur zum Entschlüsseln**. Damit lassen sich Nachrichten lesen, die mit einer früheren Version des Tools (im OpenSSL-artigen `Salted__`-Format) verschlüsselt wurden. Erkennt Cryptor beim Entschlüsseln dieses Altformat, weist es darauf hin und empfiehlt, die Nachricht neu zu verschlüsseln („Legacy message decrypted. Re-encrypt for better security."). **Neu verschlüsselt wird ausschließlich im modernen AES-256-GCM-Format** — das Legacy-Format kann nur noch gelesen, nicht mehr erzeugt werden.

## Betriebsgrenzen und Datenschutz

- **Clientseitig:** Ver- und Entschlüsselung laufen vollständig im Browser. Klartext, Passwort und Chiffrat verlassen ihn nicht. Einzige optionale Server-Interaktion ist die Passwort-Generierung, bei der keine Nutzerdaten übertragen werden.
- **Sicherer Kontext nötig:** Die Web-Crypto-API verlangt **HTTPS** (oder `localhost`). Ohne sie sind Encrypt/Decrypt deaktiviert.
- **Kein Verlauf:** Cryptor speichert bewusst nichts zwischen — keine Historie, kein lokaler Cache der Inhalte. Neu laden heißt: leeres Feld.
- **Passwort-Mindestlänge:** 8 Zeichen zum Verschlüsseln (das generierte Passwort ist mit 64 Zeichen deutlich länger).
- **Kein Schlüssel-Recovery:** Ohne das richtige Passwort gibt es keinen Weg zurück zum Klartext — das ist der Sinn der Sache, aber auch die wichtigste Stolperfalle.

Für den Einstieg und die Zielgruppen siehe die [Übersichtsseite](https://www.jpkc.com/db/tools/cryptor/). Konkrete Durchläufe stehen in den [Beispielen](https://www.jpkc.com/db/tools/cryptor/examples/), Strategie und Stolperfallen in den [Tipps & Tricks](https://www.jpkc.com/db/tools/cryptor/tips/). Ausprobieren kannst du alles direkt im [Tool](https://www.jpkc.com/tools/cryptor/).

