测试字符串的随机性

时间:2011-11-29 05:13:52

标签: random encryption

我有一个密码,我一直在玩弄模仿one-time pad。我想对我生成的键进行测试,以查看它们在随机到伪随机的范围内的位置。我发现了许多处理二进制字符串的测试套件,但没有一个适用于字符串。是否有任何测试套件可以处理字符串(或整数字符串)?如果没有,将字符串转换为二进制字符串的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

字符串是二进制字符串。唯一的问题是,如果将其限制为某些“可打印”字符,则会有一些从未使用过的位模式。

例如,如果将字符串限制为字符A...Z,则仅使用256个可能的8位值中的26个。理论上,我们可以将A...Z映射到0,1...24,25,然后计算charIndex[0] + charIndex[1] * 26 + charIndex[2] * 26 * 26 ...以获得整个字符串的“无偏”数值。当然,这不实用,但也许它会给你一个想法。

不那么复杂就是简单地考虑单个角色的相对可能性。即,你的“字母”中的所有字符应该以相同的频率出现,并且,例如,字符串“KFUTRP”已经发生,你的字母表中的所有字符应该与下一个字符同样可能。

也许更复杂但限制性更小的是允许角色拥有不同的频率,但仍然有“KFUTRP”不能“预测”任何比其整体频率具有更大/更小可能性的角色。

最终它是关于一系列字符能够“预测”序列中下一个字符的能力。

但是,如果这是一次性填充,那么要做的是通过类似加密哈希的某种哈希运行你的字符串,并使用哈希值作为你的一次性填充。然后,即使字符串是可识别的文本,哈希值也是随机的。您真正想要/需要做的就是测试随机的哈希值。