由于近来要看算法, 在网上找了几个Delphi写的AES源码,其中一个在各大下载站是最常见的,由ElASE.pas和AES.pas构成,其中主要实现文件EIASE.PAS作者EldoS, Alexander Ionov,AES.PAS实现了AES算法的接口;另外下的一个演示程序实际上主要文件也是EIASE.PAS,不过是繁体的,可能是台湾那边的。两个程序得到的结果相同,但是却让初看AES算法的我很迷惑,因为"this is a test!"这样一个16字符128位的明文,用这两个程序得到的结果密文居然是(16进制数据显示的)“10000000000000005F7DF0BF103A8C4AE6FAAD9906AC3B2A”,转回字节就是24字符了,而按照AES算法,得到的结果应该是16字节的。尝试随意用几段明文作加密,得到的结果前面都会有一堆的000,这是什么原因呢?按理说结果中不会有这些的。
经过跟踪分析,原来在AES.PAS中的加密函数中有这么一段代码
[code]
begin
OutStrm := TStream.Create;
Stream.Position := 0;
Count := Stream.Size;
OutStrm.Write(Count, SizeOf(Count));
try
{ -- 128 位密匙最大长度为 16 个字符 -- }
if KeyBit = kb128 then
[/code]
解密函数中也有一段
[code]
begin
OutStrm := TStream.Create;
Stream.Position := 0;