簡體   English   中英

Java中的Vigenere /多字母密碼解碼器/解密器/破壞器

[英]Vigenere/Polyalphabetic Cipher Decoder/Decrypter/Breaker in Java

我正在嘗試開發一個程序,該程序可以對使用Vigenere密碼編碼的消息進行編碼,解碼和破解加密。 我被卡住的地方是破壞消息的加密(沒有密鑰)。 我對如何執行此操作有一個想法,但不確定如何編寫代碼。 我的想法如下:

該程序將系統地生成可能的鍵,其長度從1開始到26結束。這些鍵將包含英語字母,並且不區分大小寫。 對於每個密鑰長度(從1-26的任何地方),密鑰都將填充字母'a',然后程序將檢查它們的密鑰是否正確(我有另一種方法)。 如果他們輸入的密碼不正確,則最后一個字母將被旋轉到字母表中的下一個字母。 一旦最后一個字母經過所有26個可能的位置,第二個到最后一個字母將被旋轉,然后最后一個字母和第二個到最后一個字母將相應地旋轉,依此類推(一直回到第一個[電位]鍵的字母)。 每次生成新密鑰時,都會使用單獨的方法檢查[潛在的]密鑰,並且在找到正確的密鑰后該方法將停止。 密鑰創建過程將如下所示:

[starting with keys that are only 1 letter long]
a
b
c
...
x
y
z

[now the potential key length becomes two]
aa
ab
ac
ad
...
zw
zx
zy
zz

[eventually the potential key length becomes 26]
aaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaab
aaaaaaaaaaaaaaaaaaaaaaaaac
aaaaaaaaaaaaaaaaaaaaaaaaad
...
zzzzzzzzzzzzzzzzzzzzzzzzzw
zzzzzzzzzzzzzzzzzzzzzzzzzx
zzzzzzzzzzzzzzzzzzzzzzzzzy
zzzzzzzzzzzzzzzzzzzzzzzzzz

(希望您可以在那里看到圖案)

如果有人擁有或知道如何執行此操作的代碼,或者可以幫助指導如何完成編碼所需的步驟,那么將不勝感激。

謝謝!

編輯 (現在我已經完成數學運算)

大約有6個* 10 ^ 36,您需要遍歷可能的組合-最大的long價值約9 * 10 ^ 18 - 少很多。

話雖這么說,說你找到一個優化的方式來遍歷組合,在這里你可以生成和比較萬億(10 ^ 12)每秒(比一般的開發人員的機器快得多 )的組合,並可以對其進行並行化跨越萬台-每年將是(60 * 60 * 24 * 365 * 10 ^ 12)* 10 ^ 6,或每年檢查約3 * 10 ^ 25個組合。

以這種驚人的速度, 仍然需要大約1900億年才能瀏覽所有組合。

我強烈敦促您研究實現目標的另一種方法,而不是嘗試每一個關鍵。

現在(返回我的原始答案),如果您有一個足夠大的鍵子集要進行迭代,我可以想象做這樣的事情:使用一個向上的數字循環,將數字轉換為修改后的以26為底的基數鍵。

一些偽代碼:

public void runAlgorithm () {
    for (int i=startKey; i<endKey; i++) {
        String key = toBase26(i);
        testKey(key);
    }
}

使用類似wikipedia的十六進制轉換器之類的東西來實現toBase26 (復制如下):

public static String toBase26(int number){
    number = Math.abs(number);
    String converted = "";
    // Repeatedly divide the number by 26 and convert the
    // remainder into the appropriate letter.
    do
    {
        int remainder = number % 26;
        converted = (char)(remainder + 'A') + converted;
        number = (number - remainder) / 26;
    } while (number > 0);

    return converted;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM