2011-11-29 85 views
1

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

回答

1

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

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

较少复杂的是简单地考虑单个字符的相对似然。也就是说,你的“字母”的所有字符都应该以相同的频率出现,并且,例如字符串“KFUTRP”已经出现,字母表中的所有字符应该与下一个字符具有相同的可能性。

也许更复杂,但较少限制是允许字符具有不同的频率,但仍然有“KFUTRP”不“预测”具有比它的整体频率大/似然度小于任何字符。

最终它了约字符序列的顺序来“预测”下一个字符的能力。

但是,如果这是一次性打印垫,那么要做的就是通过某种类似于加密散列的散列来运行字符串,并将散列值用作一次性打印垫。那么即使字符串是可识别的文本,散列值也是随机的。所有你真正想要/需要做的就是测试随机性产生的散列值。