🛠️ToolsShed

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.