🛠️ToolsShed

Controllo Sicurezza Password

Controlla la sicurezza della password con calcolo dell'entropia e tempo stimato di cracking.

Domande Frequenti

Implementazione del Codice

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.