AES加密Delphi有很多实现,QAES也是抄自先烈们的实现,进行了二次封装,但将接口进一步简单化,让其更易用。
TQAES = record private FKey: QStringW; FMode: TQAESEncryptMode; FKeyType: TQAESKeyType; FInitVector: TQAESBuffer; public function AsECB(const AKey: QStringW; AKeyType: TQAESKeyType = kt256):PQAES; overload; function AsCBC(const AInitVector: TQAESBuffer; const AKey: QStringW; AKeyType: TQAESKeyType = kt256):PQAES; overload; procedure Encrypt(ASource, ADest: TStream); overload; procedure Encrypt(const p: Pointer; len: Integer; var AResult: TBytes); overload; procedure Encrypt(const AData: TBytes; var AResult: TBytes); overload; procedure Encrypt(const AData: QStringW; var AResult: TBytes); overload; procedure Encrypt(const ASourceFile, ADestFile: QStringW); overload; // 解密函数 procedure Decrypt(ASource, ADest: TStream); overload; procedure Decrypt(const AData: TBytes; var AResult: TBytes); overload; function Decrypt(const AData: TBytes): String; overload; procedure Decrypt(const ASourceFile, ADestFile: QStringW); overload; property Key: QStringW read FKey write FKey; property Mode: TQAESEncryptMode read FMode; property KeyType: TQAESKeyType read FKeyType write FKeyType; end;
由于使用了记录(结构体)做为封装的基础,所以调用起来及其简洁:
var AES:TQAES; ... //要加密,执行下面代码之一: //1.ECB加密,默认加密位数 AES.AsECB(密钥).Encrypt(...); //2.CBC加密,默认加密位数 AES.AsCBC(密钥,初始化向量).Encrypt(...) ... //要解密,同样简单 //1.ECB解密 AES.AsECB(密钥).Decrypt(...) //2.CBC解密 AES.AsCBC(密钥,初始化向量).Decrypt(...)