Une application web moderne qui calcule en combien de temps un mot de passe peut être bruteforcé selon différentes puissances de calcul.
- 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
# 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 devL'application sera accessible sur
http://localhost:5173
- 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
- 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)
- 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
=======
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
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
// zxcvbn détecte les patterns, mots du dictionnaire, substitutions const result = zxcvbn(password); // → Retourne le nombre de tentatives nécessaires (guesses)// Temps = nombre de tentatives ÷ puissance de calcul const seconds = guesses / hashRate; // Exemple : 10^10 tentatives ÷ 200 000 H/s = 50 000 secondesformatTime(50000); // → "13.89 heures"
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
- zxcvbn - Dropbox : Algorithme d'estimation de force
- Hashcat Benchmarks : Puissances réelles des GPUs
- OWASP Password Storage : Bonnes pratiques
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
Ce projet est à but pédagogique uniquement.
! Pour contribuer :
- Fork le projet
- Créer une branche (
git checkout -b feature/amelioration)- Commit les changements (
git commit -m 'Ajout fonctionnalité')- Lancer les tests :
npm test- Vérifier le lint :
npm run lint- Push (
git push origin feature/amelioration)- Ouvrir une Pull Request
- Dropbox pour zxcvbn
- Chick3nman pour les benchmarks Hashcat