35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
import re
|
|
import pyotp
|
|
import hashlib
|
|
import hmac
|
|
|
|
def validate_password_strength(password):
|
|
"""Vérifie que le mot de passe respecte les critères de sécurité stricts."""
|
|
if len(password) < 12:
|
|
return "Le mot de passe doit contenir au moins 12 caractères."
|
|
if not re.search(r"[A-Z]", password):
|
|
return "Le mot de passe doit contenir au moins une majuscule."
|
|
if not re.search(r"[a-z]", password):
|
|
return "Le mot de passe doit contenir au moins une minuscule."
|
|
if not re.search(r"[0-9]", password):
|
|
return "Le mot de passe doit contenir au moins un chiffre."
|
|
if not re.search(r"[!@#$%^&*(),.?\":{}|<>]", password):
|
|
return "Le mot de passe doit contenir au moins un caractère spécial."
|
|
return None
|
|
|
|
def hash_password(password):
|
|
"""Hachage sécurisé du mot de passe."""
|
|
return hashlib.sha256(password.encode()).hexdigest()
|
|
|
|
def verify_password(stored_hash, provided_password):
|
|
"""Vérifie un mot de passe par rapport à son haché."""
|
|
return hmac.compare_digest(stored_hash, hash_password(provided_password))
|
|
|
|
def generate_totp_secret():
|
|
"""Génère une clé secrète pour le 2FA."""
|
|
return pyotp.random_base32()
|
|
|
|
def verify_totp(secret, code):
|
|
"""Vérifie le code TOTP fourni par l'application d'authentification."""
|
|
totp = pyotp.TOTP(secret)
|
|
return totp.verify(code) |