2016-02-25 85 views
0

所以我被要求解密用scytale算法編碼的文本文件。問題是我不知道密鑰,所以我必須迭代並嘗試猜測哪個鍵給出了可讀的文本。我們的想法是:解密scytale不知道密鑰

function decrypt($txt,$key){ 
    $out = ""; 
    for($i = 0; $i < $key; ++$i){ 
     for($j = $i; $j < strlen($txt); $j+=$key){ 
      $n = substr($txt,$j,1); 
      $out.=$n; 
      $j+=$key; 
     } 
    } 
    return $out; 
} 

... 

for($i = 1; $i <= 36567; ++$i){ 
       $decrypted = decrypt($in,$i); 
} 

其中36567是消息的長度和$in是輸入文本。有沒有辦法做到這一點,而不必檢查每個輸出?我已經試過計算通常單詞的外觀,但沒有任何運氣。這真的很複雜嗎?或者我只是簡單地用錯誤的方法去做?我甚至不知道我的代碼是否可以正常工作...

+0

@ArtjomB。這是,但那不是重點。如果你能用另一種語言的算法來幫助我,我很樂意知道 – ahernandezmiro

回答

1

此加密行爲類似於Vigenere cipher。維基百科頁面還記錄了密碼分析技術。這些東西不難破解,但很難完全自動化攻擊。如果你知道一些基本的明文,那麼計算密鑰並不困難。否則,還有其他方法需要查看塊之間的差異或猜測密鑰長度並對塊進行頻率分析。