Skip to content

HamdiUT/CrackTime

Repository files navigation

CrackTime

Une application web moderne qui calcule en combien de temps un mot de passe peut être bruteforcé selon différentes puissances de calcul.

React TypeScript Vite TailwindCSS Jest

Fonctionnalités

  • Analyse intelligente : Utilise zxcvbn pour une estimation réaliste de la force des mots de passe
  • Calcul en temps réel : Résultats instantanés pendant la saisie
  • Comparaison de puissances :
  • PC Gaming RTX 4090 (200 kH/s bcrypt)
  • Supercalculateur Jean Zay (5 MH/s bcrypt)
  • Sécurisé : Calcul 100% local, aucune donnée envoyée sur internet
  • Tests automatisés : 20 tests unitaires avec Jest
  • TypeScript : Code robuste avec typage statique

Installation

# Cloner le projet
git clone https://github.com/HamdiUT/CrackTime
cd CrackTime

# Installer les dépendances
npm install

# Lancer le serveur de développement
npm run dev

L'application sera accessible sur http://localhost:5173

Technologies utilisées

Frontend

  • React 19.2.0 : Interface utilisateur réactive
  • TypeScript 5.9.3 : Typage statique pour plus de robustesse
  • Vite 7.2.4 : Build tool ultra-rapide avec HMR
  • Tailwind CSS 3.4.1 : Framework CSS utilitaire
  • React Router 6.28.0 : Navigation entre pages

Librairies

  • zxcvbn 4.4.2 : Estimation réaliste de la force des mots de passe
  • Lucide React 0.454.0 : Icônes modernes
  • Motion 12.23.25 : Animations (Framer Motion)

Outils de développement

  • Jest 30.2.0 : Framework de tests unitaires
  • Testing Library : Tests de composants React
  • ESLint + typescript-eslint : Linting du code TypeScript/React
  • ts-jest : Support TypeScript pour Jest

=======

Puissances de calcul (bcrypt)

Les valeurs utilisées sont basées sur des benchmarks réels :

Machine Puissance (bcrypt) Source
RTX 4090 200 kH/s Hashcat Benchmarks
Jean Zay (126 PF) ~5 MH/s Estimation basée sur la puissance totale

Pourquoi bcrypt ?

bcrypt est un algorithme de hashing volontairement lent :

  • Sécurisé : Utilisé par les sites modernes (GitHub, Facebook, etc.)
  • Ralentit les attaques : ~1500x plus lent que MD5
  • Résistant aux GPU : Conçu pour être difficile à paralléliser

Comment ça fonctionne ?

1. Analyse du mot de passe (zxcvbn)

// zxcvbn détecte les patterns, mots du dictionnaire, substitutions
const result = zxcvbn(password);
// → Retourne le nombre de tentatives nécessaires (guesses)

2. Calcul du temps de crack

// Temps = nombre de tentatives ÷ puissance de calcul
const seconds = guesses / hashRate;
// Exemple : 10^10 tentatives ÷ 200 000 H/s = 50 000 secondes

3. Affichage formaté

formatTime(50000); // → "13.89 heures"

📁 Structure du projet

cracktime1/
├── src/
│   ├── components/          # Composants réutilisables
│   │   ├── PasswordInput.tsx
│   │   ├── PasswordStrengthMeter.tsx
│   │   ├── PowerSelector.tsx
│   │   ├── CrackTimeCard.tsx
│   │   ├── CalculatorComponent.tsx
│   │   └── Footer.tsx
│   ├── pages/               # Pages de l'application
│   │   ├── Home.tsx
│   │   └── About.tsx
│   ├── utils/               # Fonctions utilitaires
│   │   ├── passwordUtils.ts # Analyse avec zxcvbn
│   │   ├── crackTime.ts     # Calcul du temps
│   │   └── __tests__/       # Tests Jest (20 tests)
│   ├── App.tsx              # Composant principal + routing
│   ├── main.tsx             # Point d'entrée
│   └── index.css            # Styles globaux
├── public/
├── index.html
├── package.json
├── tsconfig.json            # Configuration TypeScript
├── jest.config.ts           # Configuration Jest
├── eslint.config.js         # Configuration ESLint
├── tailwind.config.js
├── vite.config.ts
└── README.md

## Tests

Le projet inclut **20 tests unitaires** couvrant :

- ✅ Analyse de mots de passe (détection de types de caractères)
- ✅ Calcul de la force du mot de passe (5 niveaux)
- ✅ Formatage du temps (millisecondes → années)
- ✅ Calcul du temps de crack selon la machine
- ✅ Messages humoristiques selon la résistance

📚 Ressources

📄 Licence

npm run dev      # Lance le serveur de développement
npm run build    # Build de production
npm run preview  # Prévisualise le build de production
npm run lint     # Vérifie le code avec ESLint

Licence

Ce projet est à but pédagogique uniquement.

Développement

! Pour contribuer :

  1. Fork le projet
  2. Créer une branche (git checkout -b feature/amelioration)
  3. Commit les changements (git commit -m 'Ajout fonctionnalité')
  4. Lancer les tests : npm test
  5. Vérifier le lint : npm run lint
  6. Push (git push origin feature/amelioration)
  7. Ouvrir une Pull Request

Remerciements

About

Calculateur de résistance de mots de passe avec analyse intelligente zxcvbn

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published