2011-11-29 82 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」不「預測」具有比它的整體頻率大/似然度小於任何字符。

最終它了約字符序列的順序來「預測」下一個字符的能力。

但是,如果這是一次性打印墊,那麼要做的就是通過某種類似於加密散列的散列來運行字符串,並將散列值用作一次性打印墊。那麼即使字符串是可識別的文本,散列值也是隨機的。所有你真正想要/需要做的就是測試隨機性產生的散列值。