文本熵计算器
计算任意文本的香农熵和每字符比特数。
开始输入以计算熵。
关于此工具
香农熵是对消息的平均信息量或随机性的数学度量,用比特计算。将文本粘贴到本计算器中时,它根据字符的频率分布计算熵,揭示文本的不可预测性或无序程度。高熵表示字符使用的多样性大;低熵表示模式重复。这一指标是信息论、密码学和数据压缩的基础,帮助专业人士理解数据的强度和效率。
使用此工具,只需将文本粘贴到输入框中,然后点击'计算'即可。计算器立即返回香农熵值(每字符比特数)并显示各个字符频率数据。它可应用于任何文本——密码、文档样本、代码片段或自然语言——并处理特殊字符、空白和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.