Metadata-Version: 2.4
Name: noxcrypt
Version: 2.0.0
Summary: Boîte à outils interactive (terminal) pour chiffrer, déchiffrer et casser les encodages et chiffrements des CTF
Author: cyph3r_n0x
License-Expression: MIT
Keywords: ctf,crypto,cipher,rot13,base64,vigenere,rsa,xor,jwt,hash,tui,cli,cybersecurity
Classifier: Environment :: Console
Classifier: Intended Audience :: Information Technology
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: Utilities
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: textual>=8.0
Requires-Dist: rich>=13.0
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Dynamic: license-file

# noxcrypt

Boîte à outils **interactive** (interface plein écran en couleurs, dans le terminal) pour chiffrer, déchiffrer
**et casser** les encodages et chiffrements des CTF. Pensé comme `arsenal-ng` : tu cherches, tu choisis, tu tapes, tu vois le résultat en direct.

Créé par **cyph3r_n0x**.

## Installation

```bash
pipx install noxcrypt            # recommandé sur Kali (pas de conflit système)
pip install noxcrypt             # ou pip classique
```

Une seule commande, toujours la **dernière** version (`pipx upgrade noxcrypt` pour mettre à jour). Python 3.10+, aucune dépendance système (tout en Python pur : pas de gmpy2, pas d'OpenSSL requis).

## Utilisation

```bash
noxcrypt                         # interface interactive
noxcrypt tui "SGVsbG8=" -a auto  # interface, texte et algo préremplis
```

### Dans l'interface

| Touche | Action |
|---|---|
| `Ctrl+F` | aller à la recherche (`rot`, `base`, `rsa`, `jwt`, `stego`…) |
| `Ctrl+L` | aller dans la liste des algos / les pistes |
| `↑` `↓` | parcourir la liste ou les pistes — **même depuis la recherche** (plus besoin de la souris) |
| `Ctrl+T` | basculer **Chiffrer / Déchiffrer** |
| `Ctrl+G` ou le bouton **⧉ Copier** | copier le résultat (presse-papiers + OSC52, marche en SSH/tmux) |
| `Ctrl+R` | envoyer le résultat dans l'entrée (pour enchaîner) |
| `Ctrl+Q` | quitter |

Le résultat se met à jour à chaque frappe. `Tab` change de zone, `Entrée` sur un algo va à la saisie, `Entrée` sur une piste la copie.

L'entrée **auto** (par défaut) essaie tous les décodeurs sans clé, en chaîne (ex. `base64 > hex`), et classe les pistes par score. Les entrées **brute** testent toutes les clés (César, XOR 1 octet, rail fence, affine).

### En ligne de commande (sans interface)

```bash
noxcrypt list                                 # tous les algos + tous les outils
noxcrypt enc rot13 "Hello CTF"
noxcrypt dec vigenere "lxfopvefrnhr" -k lemon
noxcrypt enc playfair "hide the gold" -k "playfair example"
noxcrypt dec enigma "BDZGO" -k "I II III B AAA AAA"
noxcrypt auto "NjY2YzYxNjc3YjYzNjgzNDMxNmU3ZA=="
noxcrypt brute caesar "khoor zruog"

# outils avancés (sous-commande `tool`)
noxcrypt tool analyse -f message.txt                 # IC, chi², entropie, langue
printf 'n=...\ne=65537\nc=...' | noxcrypt tool rsa -  # attaques RSA
noxcrypt tool rsa -f params.txt --online             # + factordb.com
noxcrypt tool hash-crack 5f4dcc3b5aa765d61d8327deb882cf99
noxcrypt tool hash-crack <hash> -w rockyou.txt       # dictionnaire perso
noxcrypt tool jwt-crack "eyJ..." -w secrets.txt
noxcrypt tool vigenere-attack -f chiffre.txt         # casse sans clé
noxcrypt tool stego-zw -f suspect.txt                # texte caché
```

`enc` / `dec` écrivent le résultat brut (sans couleur) : utilisable dans un pipe.

## Ce qu'il sait faire

**Encodages** — base64/32/58/85, ascii85, base62/91/45, Z85, Crockford32, UUencode, quoted-printable, punycode, hex/binaire/octal/décimal, a1z26, URL, HTML, morse, NATO, braille, code Gray, Baudot/ITA2, Bubble Babble, Brainfuck, Ook!, leetspeak, tap code, multitap, grand entier ↔ octets, base64 à alphabet perso.

**Chiffrements** — César, ROT13/47, Atbash, Vigenère, Autokey, Beaufort, Porta, Gronsfeld, affine, Bacon, Playfair, Four-square, Polybius, Bifid, Trifid, ADFGVX, Hill (2×2 / 3×3), clavier décalé, rail fence, transposition par colonnes, scytale, **Enigma M3** (simulation), XOR.

**Attaques sans clé** — Vigenère (Kasiski + indice de coïncidence), XOR multi-octets (distance de Hamming), substitution monoalphabétique (montée + quadgrammes EN/FR), transposition par colonnes, Playfair (recuit simulé), crib dragging / masque jetable réutilisé.

**RSA** — petit `e`, Fermat (p et q proches), Wiener (d petit), module commun, Håstad (`e` destinataires), Pollard rho, facteurs triviaux, et `--online` via factordb.com. Tout en Python pur.

**Hash & jetons** — identification, cassage par dictionnaire (MD5/SHA-1/SHA-2/NTLM), extension de longueur MD5/SHA1/SHA256, JWT (`alg=none`, secret HMAC faible, forge).

**Divers** — détection de mode ECB, masque jetable réutilisé (CTR), stégano texte (caractères invisibles zero-width, espaces en fin de ligne, acrostiche, tag characters Unicode), statistiques (`analyse`).

## Limites (honnêtes)

- `auto` n'enchaîne que les décodeurs **non ambigus**. Les formats exotiques (leetspeak, polybius, braille, Enigma…) ne sont pas essayés automatiquement : choisis-les à la main dans la liste.
- Le score est une **heuristique** (mots courants EN/FR, forme `flag{...}`, quadgrammes). Lis toujours les premières pistes, pas seulement la première. Un texte dans une autre langue peut passer inaperçu.
- `brute xor` ne teste que les clés d'**un octet** ; pour une clé plus longue, utilise `tool xor-attack`.
- L'attaque Playfair (recuit simulé) et la substitution demandent assez de texte (≥ 80 / 60 lettres) et peuvent échouer sur un texte court.
- **Non inclus** (pas de standard fiable ou hors périmètre d'un outil pur-Python) : décodage de Whitespace/JSFuck, pigpen/sémaphore en texte, oracle de padding, chiffre du livre, attaques RSA de type Coppersmith (clé partielle, Håstad `e>3` avec bourrage), Franklin-Reiter, homoglyphes. Le dictionnaire de mots de passe embarqué est volontairement petit : passe le tien avec `-w`.

Les vecteurs de test sont **vérifiés par le code** (pas recopiés d'une doc), et les erreurs relevées dans la documentation de départ ont été corrigées.

## Développement

```bash
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
pytest                 # 110 tests
python -m build        # wheel + sdist
```

Architecture : `base.py` (briques communes), `classic.py` + `encodings.py` + `ciphers.py` (algos enc/dec), `attacks.py` / `rsa.py` / `hashes.py` / `jwt_tools.py` / `blockcipher.py` / `stego.py` (outils), `analysis.py` (score + stats), `algos.py` (registre), `tools.py` (registre des outils), `tui.py` / `cli.py` (interfaces).

## Publication sur PyPI (pour cyph3r_n0x)

```bash
python -m build
python -m twine upload dist/*     # demande ton token PyPI (compte + jeton sur pypi.org)
```

`2.0.0` est la **première** version publiée : une fois en ligne, `pipx install noxcrypt` récupère directement celle-ci, sans suffixe ni URL longue. Une version PyPI ne peut pas être réécrite : pour corriger, publie `2.0.1`.

## Licence

MIT
