Refonte du système de chiffrement / validation des mots de passe
Description du problème
On observe les problèmes suivants par rapport au chiffrement des mots de passe :
- Si le mot de passe entré contient de lettres
a
, alors la méthodeencryptPassword
lève une exceptionIllegalArgumentException
, donc il ne se passe rien, et le mot de passe n'est pas chiffré. - Si le mot de passe entré ne contient pas de lettres
a
, alors le mot de passe reste en clair et n'est donc pas chiffré car la méthodeencryptPassword
ne modifie rien. - Par soucis de sécurité on ne doit pas pouvoir décrypter le mot de passe comme indiqué par la méthode
decryptPassword
.
L'issue a donc pour objectif de résoudre ces trois points.
Choix des tests à effectuer
Afin de satisfaire ce ticket, la classe PasswordManager
devra :
-
Accepter les mots de passe qui contiennent des a, comme ceux qui n'en contiennent pas
-
Contrôler que les mots de passe chiffrés sont différents de ceux entrés par l'utilisateur
-
Contrôler que le programme s'exécute toujours sans la méthode
decryptPassword
Solution à mettre en œuvre
De notre point de vue, si l'on veut respecter les standards de sécurité convenables, on ne doit pas être en mesure de décrypter un mot de passe. Nous avons donc décidé d'utiliser un algorithme de hash. Une fonction de hash permet de chiffrer le mot de passe simplement sans possibilité d'avoir une fonction réciproque qui pourrait retrouver le mot de passe initial. On utilise la classe MessageDigest
qui permettra d'utiliser des algorithmes comme le SHA-256
.
Les changements concernent uniquement la classe PasswordManager
et consistent à :
- Supprimer la méthode
decryptPassword
- Car son comportement n'est pas souhaitable (cf. description du problème)
- La logique sera déplacée dans la méthode
validatePassword
- Modification de la méthode
String encryptPassword(String password)
- Cette méthode requiert un mot de passe en entrée et retourne son hash
- On utilise la classe
MessageDigest
pour récupérer le hash depassword
enSHA-256
- Modification de la méthode
validatePassword
- Il faut comparer le hash du mot de passe de l'utilisateur stocké avec celui saisi
Issue numéro 11 dans l’énoncé