邮件已收到,我刚才看了一下,似乎 rtfrtf 是 atporrtf.txt 的加密结果,不过我发现
这两个文件的长度不一致——不知是不是您在atporrtf.txt的第一行加了一个换行?
在我将atporrtf.txt的头两个字节忽略后,对它们进行按字节相减运算,得到了一个新的
文件——哈哈!这个文件的内容不是00就是01这说明密文和明文的每个字节要么相同,要么
只相差1!下面就是明文以及 密文-明文 的Hex显示值:
明文:
31 2E D4 DA D2 B3 C3 E6 B5 C4 B5 DA D2 BB D0 D0
BC D3 C8 EB CD BC C6 AC 75 73 74 63 7A 69 31 2E
6A 70 65 67 2C D6 B8 B6 A8 C6 E4 B8 DF B6 C8 CE
AA 39 30 CF F3 CB D8 A3 AC BF ED B6 C8 CE AA 36
30 30 CF F3 CB D8 A3 BB 0D 0A 32 2E BD AB D2 B3
C3 E6 CA F4 D0 D4 D6 D0 B5 C4 B1 EA CC E2 B8 C4
CE AA A1 B0 D6 D0 B9 FA BF C6 D1 A7 BC BC CA F5
B4 F3 D1 A7 A1 B1 A3 BB 0D 0A 33 2E BD AB CE C4
B1 BE A1 B0 BD F0 D5 AF C2 B7 39 36 BA C5 A3 AC
BA CF B7 CA A3 AC B0 B2 BB D5 A3 AC D6 D0 BB AA
C8 CB C3 F1 B9 B2 BA CD B9 FA A1 B1 B5 C4 D1 D5
C9 AB B8 C4 CE AA C7 B3 C0 B6 C9 AB A3 BB 0D 0A
34 2E BD AB D2 B3 C3 E6 D7 EE CF C2 B7 BD B5 C4
B1 ED B8 F1 CA F4 D0 D4 B8 C4 CE AA A3 BA B6 D4
C6 EB B7 BD CA BD CE AA CB AE C6 BD BE D3 D6 D0
A3 AC B5 A5 D4 AA B8 F1 B1 DF BE E0 CE AA 34 A3
AC B5 A5 D4 AA B8 F1 BC E4 BE E0 CE AA 35 A3 AC
B1 DF BF F2 B4 D6 CF B8 CE AA 32 A1 A3
密文-明文:
01 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01
00 01 00 01 00 01 00 01 01 01 01 01 01 01 01 01
01 01 01 01 01 00 01 00 01 00 01 00 01 00 01 00
01 01 01 00 01 00 01 00 01 00 01 00 01 00 01 01
01 01 00 01 00 01 00 01 01 01 01 01 00 01 00 01
00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01
00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01
00 01 00 01 00 01 00 01 01 01 01 01 00 01 00 01
00 01 00 01 00 01 00 01 00 01 01 01 00 01 00 01
00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01
00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01
00 01 00 01 00 01 00 01 00 01 00 01 00 01 01 01
01 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01
00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01
00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01
00 01 00 01 00 01 00 01 00 01 00 01 00 01 01 00
01 00 01 00 01 00 01 00 01 00 01 00 01 01 00 01
00 01 00 01 00 01 00 01 00 01 01 00 01
至于什么地方是00,什么地方是01,看起来似乎有一点规律,但又不是很有规律,于是我
进行了猜测——应该是和明文的值有关。随后的分析证实了我的想法:
将明文看成一个Byte数组,加密顺序为正序。当遇到的明文的值小于128时,密文等于明
文+1;反之,当明文的值大于等于128时,这第一个字符的密文和明文相同,而紧跟着的后
一个字符的密文则等于明文+1。
对应的算法代码为:
function Encode(Str:String):String;
var
i,n:Integer;
b:Boolean;
begin
n:=Length(Str);
SetLength(Result,n);
b:=false;
for i:=1 to ndo
begin
Result
:=Str;
if b then
b:=false
else
b:=(Byte(Result) and $80)>0;
if not b then
Inc(Result);
end;
end;
——呵呵,够简单吧
ps:
我的所有分析都是用自编工具 FileTool 完成的(包括Hex显示、文件相减),下载地址为:
http://xianjun.vicp.net/temp/以前的文件/FileTool.zip
http://www24.brinkster.com/creationzy/download.asp?id=1
)