我正在做一些加密工作,可以创建像t7AZChkiBA
或?t7AZDxknCE34F14OuwuXiIcGBIKqSGya03CY9cf9iUSPuCb7owPUzmfTxoBsDzE533S82dvKqm7KmOkREtknHH30z6rLHAHg29COKjX9A6uZxh4fAlrRy
这样的加密字符串
长度不是固定的。我如何才能发现这个字符串是否是随机的,并且没有任何意义?
我没有字典。我试图找到一些统计相关性,但我不知道怎么做。
发布于 2015-05-20 15:24:47
我认为这个网站会有帮助,它有一个关于任意字符串的香农熵的在线计算器,一个公式,以及一个相当好的解释:
http://www.shannonentropy.netmark.pl/
从这个计算器中,您要寻找的是“度量熵”,它等于香农的enthropy除以字符串长度,这是字符串随机性的度量。它可以接受0到1之间的值,其中1表示字符串是随机均匀分布的。
发布于 2015-05-20 15:27:12
该字符串不是随机位字符串。它似乎完全由某种字母表中的字符组成。这些字符可能是某种完全随机化输入集的一部分。
要真正测试随机性,您需要将密文转换为位字符串。然后获取由NIST或德国BSI定义的测试应用程序之一来测试随机性,并使用位串作为输入。
要确定它不是随机的,您可以运行频率分析或确定汉明距离是否与密文上的0.5有显着不同。如果我仔细看看你的随机文本,很可能其中一个测试失败了。尽管还有许多其他测试,但您只需要一次失败的测试就可以证明它不是随机的。
当然,由于任何位字符串对于随机文本的可能性都是一样的,所以您只能以一定的置信度来显示它不是随机的。
此外,完全有可能欺骗随机数测试。密文通过这些测试的事实并不意味着密文能够经受住有针对性的攻击。
发布于 2015-05-20 15:25:58
一种技术-对较长的字符串效果更好-将生成一组非常大的随机样本字符串,然后计算它们的一些统计数据,以获得随机输入的平均和标准差,这将使您获得任何给定输入字符串不随机的粗略百分比。组合这些测试-每个测试使用不同的统计数据-应该会给你一个更准确的测试。
至于统计数据是什么,它可能在一定程度上取决于您期望的非随机输入类型(例如,您是否需要针对旨在欺骗您的程序的用户工程非随机输入进行“保护”):
>H19检查大写字母、小写辅音、小写元音、数字显示与输入格式中此类字符的数量大致成比例(例如,如果您有52个字符和10个数字= 62个可能的字符值,则预期小写元音平均为字符串长度的5/62,并且可以计算标准偏差来告诉您较高/较低值的重要性
检查传入字符中的特定位被设置的频率
https://stackoverflow.com/questions/30342641
复制相似问题