CipherWorks
Le projet en bref
- Contexte
- Projet personnel d’application Android, développé avec Flutter et Dart.
- Mon rôle
- Développement des outils réunis dans CipherWorks : chiffrement, gestion d’identifiants et codes temporaires.
- Livrable consultable
- Extraits Dart commentés et archive des quatre extraits.
- Résultat et limites
- Le code permet d’examiner des fonctions précises. Il ne constitue pas un audit de sécurité complet ; la disponibilité actuelle sur Google Play reste non confirmée.
Difficulté technique
Un code TOTP dépend du secret, de l’horodatage et des paramètres du compte. Une période ou un nombre de chiffres incohérent peut produire un code différent de celui attendu.
L’extrait présenté conserve ces paramètres dans
TotpEntry et les transmet à la bibliothèque
otp. Les valeurs par défaut sont de six chiffres pour
une période de 30 secondes. Cette séparation rend le calcul
lisible et ses paramètres explicites.
La génération des mots de passe utilise
Random.secure(). Le contrôle de saisie, lui, vérifie
une règle de formulaire : il faut examiner ces deux fonctions
séparément pour comprendre leur portée.
Une application Android qui rassemble plusieurs outils de cybersécurité dans une interface mobile, développée avec Flutter et Dart.
Les fonctionnalités
- Chiffrement et déchiffrement de données.
- Gestion d’identifiants et génération de mots de passe.
- Codes de double authentification (TOTP).
- Filigrane sur les photos.
- Analyse du réseau et flux d’actualités de sécurité.
L’application en images
Visuels de présentation conservés de CipherWorks.
Fonctionnement documenté par le code
Génération des mots de passe
La fonction _generatePassword produit 18 caractères
par défaut. Elle utilise
Random.secure()
et tire chaque caractère dans un alphabet défini. La longueur peut
être passée en paramètre.
Lire la fonction Dart
lib/vault_screen.dart, lignes 109 à 117.
String _generatePassword({int length = 18}) {
const chars =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#%^*()-_=+[]{}';
final rand = Random.secure();
return List.generate(
length,
(_) => chars[rand.nextInt(chars.length)],
).join();
}
Contrôle de la saisie
Avant le chiffrement, la saisie est contrôlée : au moins 12 caractères, une lettre, un chiffre et un symbole. Ce contrôle est une règle de formulaire.
Lire le contrôle de saisie
lib/encryption_screen.dart, lignes 292 à 297.
bool validatePassword(String password) {
return password.length >= 12 &&
RegExp(r'[A-Za-z]').hasMatch(password) &&
RegExp(r'[0-9]').hasMatch(password) &&
RegExp(r'[!@#$%^&*(),.?":{}|<>]').hasMatch(password);
}
Codes temporaires TOTP
Le modèle TotpEntry conserve les paramètres du
compte. Par défaut, il prévoit six chiffres et une période de 30
secondes. Le calcul du code est confié à la bibliothèque
otp, à partir du secret et de l’horodatage.
- Lire les paramètres du compte
- Calculer le code temporaire
- Actualiser l’affichage
Lire l’appel au calcul TOTP
lib/totp_screen.dart, lignes 118 à 131.
String _currentCode(TotpEntry entry) {
try {
return OTP.generateTOTPCodeString(
entry.secret,
_now,
length: entry.digits,
interval: entry.period,
algorithm: entry.algorithm,
isGoogle: true,
);
} catch (_) {
return '-----';
}
}
Télécharger les quatre extraits Dart
Origine des éléments présentés
Les extraits proviennent des fichiers du projet Flutter. Ils sont fournis comme fragments de code à lire. Les visuels de présentation proviennent des ressources de l’ancienne fiche Google Play.




