본문으로 건너뛰기
🛠️ToolsShed

텍스트 엔트로피 계산기

텍스트의 섀넌 엔트로피와 문자당 비트수를 계산합니다.

엔트로피 계산을 위해 텍스트를 입력하세요.

이 도구 소개

섀넌 엔트로피는 메시지의 평균 정보량이나 무작위성을 수학적으로 측정한 것으로, 비트 단위로 계산됩니다. 이 계산기에 텍스트를 붙여넣으면 문자의 빈도 분포를 기반으로 엔트로피를 계산하여 텍스트가 얼마나 예측 불가능하거나 무질서한지 보여줍니다. 엔트로피가 높을수록 문자 사용의 다양성이 크고, 낮을수록 반복적인 패턴을 시사합니다. 이 지표는 정보 이론, 암호학, 데이터 압축의 기초이며, 보안 전문가가 자신의 데이터 강도와 효율성을 이해하는 데 도움이 됩니다.

이 도구를 사용하려면 입력 필드에 텍스트를 붙여넣고 '계산' 버튼을 클릭하면 됩니다. 계산기는 즉시 섀넌 엔트로피 값(문자당 비트 수)을 반환하고 개별 문자 빈도 데이터를 표시합니다. 암호, 문서 샘플, 코드 스니펫, 자연어 등 모든 텍스트에 작동하며, 특수 문자, 공백, 유니코드를 처리합니다. 이는 보안 분석가가 암호 품질을 평가하고, 엔지니어가 압축 가능성을 평가하며, 연구자가 텍스트 패턴을 연구하기 위한 필수적인 도구입니다.

높은 엔트로피만으로는 좋은 암호를 보장하지 않는다는 점을 기억하세요. 엔트로피는 분포의 다양성을 반영하지만 진정한 무작위성은 아닙니다. 이 도구는 관찰된 결과를 기반으로 각 문자가 동일한 확률(최대 엔트로피)을 가진다고 가정하므로, 진정한 암호 보안은 생성 방법에도 따라 달라집니다. 큰 텍스트의 경우 엔트로피는 자연어 기준(영어의 경우 약 1.5비트/문자) 근처에서 안정화되지만, 더 짧은 샘플은 더 높은 변동성을 보일 수 있습니다.

자주 묻는 질문

코드 구현

import math
import re

def password_entropy(password: str) -> float:
    """Calculate Shannon entropy in bits for a password."""
    pool = 0
    if re.search(r"[a-z]", password): pool += 26
    if re.search(r"[A-Z]", password): pool += 26
    if re.search(r"[0-9]", password): pool += 10
    if re.search(r"[^a-zA-Z0-9]", password): pool += 32  # common special chars
    if pool == 0:
        return 0.0
    return len(password) * math.log2(pool)

def shannon_entropy(text: str) -> float:
    """True Shannon entropy based on character frequency."""
    from collections import Counter
    counts = Counter(text)
    n = len(text)
    return -sum((c / n) * math.log2(c / n) for c in counts.values())

# Examples
print(f"'password' entropy: {password_entropy('password'):.1f} bits")    # ~37.6
print(f"'P@ssw0rd!' entropy: {password_entropy('P@ssw0rd!'):.1f} bits")   # ~52.5
print(f"Random 16-char (all types): {password_entropy('aB3!xK9#mN2@pQ7^'):.1f} bits") # ~104.8

# Strength rating
def strength(bits: float) -> str:
    if bits < 28: return "Very Weak"
    if bits < 36: return "Weak"
    if bits < 60: return "Reasonable"
    if bits < 80: return "Strong"
    return "Very Strong"

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.