跳到内容
🛠️ToolsShed

文本熵计算器

计算任意文本的香农熵和每字符比特数。

开始输入以计算熵。

关于此工具

香农熵是对消息的平均信息量或随机性的数学度量,用比特计算。将文本粘贴到本计算器中时,它根据字符的频率分布计算熵,揭示文本的不可预测性或无序程度。高熵表示字符使用的多样性大;低熵表示模式重复。这一指标是信息论、密码学和数据压缩的基础,帮助专业人士理解数据的强度和效率。

使用此工具,只需将文本粘贴到输入框中,然后点击'计算'即可。计算器立即返回香农熵值(每字符比特数)并显示各个字符频率数据。它可应用于任何文本——密码、文档样本、代码片段或自然语言——并处理特殊字符、空白和Unicode。这使其成为安全分析师评估密码强度、工程师评估压缩潜力和研究人员研究文本模式的必要工具。

请注意,高熵本身不能保证良好的密码;熵反映的是分布多样性,而非真正的随机性。该工具基于观察结果假设每个字符的可能性相等(最大熵),因此真正的密码学安全还取决于生成方法。对于大型文本,熵稳定在自然语言基准附近(英文约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.