下面就分别来分析。
先来说说中间密文,这个最复杂也最重要,因为它是由明文加密而得,只与明文和算法有关,如果要想知道代码内容的话只需要能破译中间密文就行了。
中间密文长度与明文相同,但是明文中的英文字母、数字和英文符号(也就是ascii码9和32~127)是经过加密了的,而其他字符不变。中间密文不是对明文的简单替换,也就是说"a"加密之后不会是同一个字符,但是也是有规律可循。以下是对10个"a"加密后的结果:#@~^CgAAAA==CmlCmlmllmygMAAA==^#~@
去掉前缀后缀看看有什么规律,呵呵,对,中间密文里始终只出现"C"、"m"、"l"三个字符,也就是说每个字符只由三个字符来替换(注意有四个例外:回车始终用"@#@&"、"<"用"@!",">"用"@*"、"@"用"@$")。你还将发现不同明文的密文出现的位置始终一样。比如若干个a的密文,第1、4、13、17、21、......位是C;若干个b的密文也只有第1、4、13、17、21、......位是8。也就是说密文中的三个字符出现的位置是固定的。不知道你理解没有,看例子:
10个a的密文:CmlCmlmllm
10个b的密文:8(48(4(44(
不过即使这样我怎么知道密文哪一位出现哪个字符呢?呵呵,那就把长度加到150来看看。呵呵,发现规律了:密文中三个字符出现的位置是以64为周期的序列。现在我们只需知道前面64位的排列序列就行了。
这里我把序列提取出来了,这里用"1"、"2"、"3"来代替字符,序列是:1231232332321323132311233213233211323231311231321323112331123132
举个例子,a的密文第一个是C,查找上面的序列,1就代表C了,所以凡是出现1的位置都会出现C(如果在那个位置明文是a的话),超过了又从头开始查找。
序列搞定了,不过字符替换规则的公式一直找不到(或许没有^_^),没办法,只好用穷举法了。下表列出了所有字符的替换规则:
_____________________________________
ASCII | Char | 1 | 2 | 3 |
-------------------------------------
9 (Tab) 7 i d
13 (CR) @#@& @#@& @#@&
32 (Space) ~ , P
33 ! Z e "
34 " E r J
35 # : [ a
36 $Content$nbsp; y f ^