一个DELPHI写的AES算法源码中的问题

本文探讨了在Delphi环境下使用AES算法时遇到的问题,即加密16字符的明文后,得到的密文在16进制表示下前缀出现额外的000。通过代码分析发现,这源于加密和解密函数中在TStream头部写入了明文长度信息。注释掉这部分代码后,密文长度得以纠正,符合AES算法的16字节预期。
摘要由CSDN通过智能技术生成

    由于近来要看算法, 在网上找了几个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;
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值