2012-04-07 715 views
0

需要解決普雷費爾代碼shotgnhillclimbing方法,要做到這一點首先簡單通過生成隨機密鑰,然後計算由英語 - 書字母表對頻率的分數。波雷費密碼隨機密鑰(C#)

但我不知道如何產生不重複的隨機密鑰,這是25!可能性。所以如果我永遠使用,我找到正確的鑰匙的可能性是超級小。

我怎麼可能產生非常關鍵的,然後要求編譯器不能再使用它?我是否使用列表:添加或刪除?或者還有其他什麼?或者可能是一個字符串[25!]?

+0

25!大約是2^83,這與查找SHA-1 collission所需的計算次數大致相同,所以你在沒有采取蠻力路線時是正確的:)我建議不要使用該字符串來填充該字符串,那麼您將用完原子做到這一點。 – 2012-04-15 13:50:57

回答

1

通常的方法是用隨機鍵啓動,然後在每一個步驟進行修改。您可以執行的修改包括:交換兩個關鍵字母,交換兩個完整行,交換兩個整列,圍繞中間列反射,圍繞中間行反射,或圍繞兩個主要對角線中的任意一個反射。在每個步驟中,您隨機選擇修改類型和修改位置。

這有可能是你的隨機選擇對鍵矩陣沒有影響。例如,如果您選擇交換兩行,併爲交換的兩個操作數選擇相同的兩行,則關鍵矩陣將保持不變。沒關係。兩個連續的操作也可能相互顛倒,從而將鍵矩陣返回到其先前的狀態。這也很好。因爲每個決策都是隨機的,所以一些改進的關鍵矩陣,有些更糟糕,你的爬山算法將工作得很好(雖然它可能需要更多的步驟)。

的一點是,重複的隨機密鑰的概率是相當低的,而且它如果它確實發生沒有太大的問題。

+0

非常感謝 – user1319190 2012-04-07 22:11:17