コンテンツへスキップ
🛠️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.