Перейти к содержимому

Калькулятор энтропии текста

Вычислите энтропию Шеннона и бит на символ для любого текста.

Начните печатать для расчёта энтропии.

Об этом инструменте

Энтропия Шеннона — это математическая мера среднего информационного содержания или случайности сообщения, рассчитываемая в битах. Вставляя текст в этот калькулятор, он вычисляет энтропию на основе распределения частоты символов, раскрывая, насколько непредсказуем или неупорядочен текст. Более высокая энтропия указывает на большее разнообразие использования символов; более низкая энтропия указывает на повторяющиеся закономерности. Эта метрика является основополагающей для теории информации, криптографии и сжатия данных, помогая специалистам понять надёжность и эффективность своих данных.

Чтобы использовать этот инструмент, просто вставьте ваш текст в поле ввода и нажмите 'Рассчитать'. Калькулятор мгновенно возвращает значение энтропии Шеннона (в битах на символ) и показывает данные индивидуальной частоты символов. Он работает с любым текстом — паролями, образцами документов, фрагментами кода или естественным языком — и обрабатывает специальные символы, пробелы и 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.