Vérificateur de force de mot de passe
Vérifiez la force d'un mot de passe avec calcul d'entropie et temps estimé de déchiffrement.
Questions Fréquentes
Implémentation du Code
import math
from collections import Counter
def password_entropy(password: str) -> float:
"""Calculate Shannon entropy of the password string."""
if not password:
return 0.0
counts = Counter(password)
total = len(password)
return -sum((c / total) * math.log2(c / total) for c in counts.values())
def charset_size(password: str) -> int:
size = 0
if any(c.islower() for c in password): size += 26
if any(c.isupper() for c in password): size += 26
if any(c.isdigit() for c in password): size += 10
if any(not c.isalnum() for c in password): size += 32
return size or 1
def strength_score(password: str) -> dict:
length = len(password)
pool = charset_size(password)
# Theoretical max entropy: log2(pool^length)
bits = length * math.log2(pool)
shannon = password_entropy(password) * length
if bits < 28:
label, color = "Very Weak", "red"
elif bits < 36:
label, color = "Weak", "orange"
elif bits < 60:
label, color = "Moderate", "yellow"
elif bits < 80:
label, color = "Strong", "lime"
else:
label, color = "Very Strong", "green"
return {
"length": length,
"charset_size": pool,
"entropy_bits": round(bits, 1),
"shannon_entropy": round(shannon, 1),
"strength": label,
"color": color,
}
if __name__ == "__main__":
samples = ["abc", "password123", "P@ssw0rd!", "xK#9mL2$vQ7!nR4@"]
for pwd in samples:
result = strength_score(pwd)
print(f"{pwd!r}: {result['strength']} ({result['entropy_bits']} bits)")Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.