擅长:python、mysql、java
<p>没有一种可靠的方法可以判断,但实际上你可以做两件事:</p>
<ol>
<li><p>检查是否有许多非ascii字符(如果您希望人们发送英文文本)。</p></li>
<li><p>检查数值分布。在普通文本中,有些字母比其他字母更常见。但在加密文本中,所有字符的可能性都差不多。</p></li>
</ol>
<p>后一种简单的方法是查看是否有任何字符出现超过(N/256)+5*sqrt(N/256)次(总共有N个字符),在这种情况下,它很可能是一种自然语言(未加密)。在</p>
<p>在python中(与上面的逻辑相反,加密时为“true”):</p>
<pre><code>def encrypted(text):
scores = defaultdict(lambda: 0)
for letter in text: scores[letter] += 1
largest = max(scores.values())
average = len(text) / 256.0
return largest < average + 5 * sqrt(average)
</code></pre>
<p>数学的基础是平均数是平均数的高斯分布,方差等于平均数——这并不完美,但可能已经足够接近了。默认情况下(在不可靠的情况下,使用少量的文本)这将返回false(抱歉;之前我有一个错误的版本,其中“max()”对于小数字的逻辑是错误的)。在</p>