因此我被要求解密用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 :(得分:1)
此加密的行为类似于Vigenere cipher。维基百科页面还记录了密码分析技术。这些事情并不难打破,但要完全自动化攻击很难。如果您知道一些基础明文,那么计算密钥并不太难。否则,还有其他方法需要查看块之间的差异或猜测密钥长度以及对块进行频率分析。