비밀번호 강도 검사기
엔트로피 계산과 크래킹 시간 추정으로 비밀번호 강도를 확인.
자주 묻는 질문
코드 구현
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.