以下代码出自http://blog.csdn.net/hellogv/,引用请注明出处!
代码有点乱,想要具体实现方法的朋友,可以给我留言
附:以下代码在杨泽晖 (Jorlen Young)所开发的AES算法接口上改进!
function StrToHex(Value: string): string;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(Value) do
Result := Result + IntToHex(Ord(Value[I]), 2);
end;
function EncryptString(Value: string; Key: string): string;
var
SS, DS: TStringStream;
Size: Int64;
AESKey256: TAESKey256;
begin
Result := '';
SS := TStringStream.Create(Value);
DS := TStringStream.Create('');
try
Size := SS.Size;
DS.WriteBuffer(Size, SizeOf(Size));
FillChar(AESKey256, SizeOf(AESKey256), 0 );
Move(PChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));
EncryptAESStreamECB(SS, 0, AESKey256, DS);
Result := StrToHex(DS.DataString);
finally
SS.Free;
DS.Free;
end;
end;
function HexToStr(Value: string): string;
var
I: Integer;
begin
Result := '';
for I := 1 to Length(Value) do
begin
if ((I mod 2) = 1) then
Result := Result + Chr(StrToInt('0x'+ Copy(Value, I, 2)));
end;
end;
function DecryptString(Value: string; Key: string): string;
var
SS, DS: TStringStream;
Size: Int64;
AESKey256: TAESKey256;
begin
Result := '';
SS := TStringStream.Create(HexToStr(Value));
DS := TStringStream.Create('');
try
Size := SS.Size;
SS.ReadBuffer(Size, SizeOf(Size));
FillChar(AESKey256, SizeOf(AESKey256), 0 );
Move(PChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));
DecryptAESStreamECB(SS, SS.Size - SS.Position, AESKey256, DS);
Result := DS.DataString;
finally
SS.Free;
DS.Free;
end;
end;
// ---------- 文件加密函数 按照 256 位密匙加密
procedure TSysClass.EncryptFile(SourceFile, DestFile: string;Key: string);
var
SFS, DFS: TFileStream;
Size: Int64;
AESKey256: TAESKey256;
info:string;
begin
SFS := TFileStream.Create(SourceFile, fmOpenRead);
try
DFS := TFileStream.Create(DestFile, fmCreate);
try
//-----------------------------文件解密部分---------------------------------
Size := SFS.Size;
DFS.WriteBuffer(Size, SizeOf(Size));
FillChar(AESKey256, SizeOf(AESKey256), 0 );
Move(PChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));
EncryptAESStreamECB(SFS, 0, AESKey256, DFS);
//-----------------------------在文件尾部加入判断解密是否成功的信息----------
info:=EncryptString('123456789',Key);
DFS.Seek(0,soFromEnd);
DFS.Write(Info[1],60);//往后面写入60个字符,其中有一些保留没有使用
finally
DFS.Free;
end;
finally
SFS.Free;
end;
end;
// ---------- 文件解密函数 按照 256 位密匙解密
Function TSysClass.DecryptFile(SourceFile, DestFile: string;Key: string):boolean;
var
Test, DFS: TFileStream;
SFS:TMemoryStream;
Size: Int64;
AESKey256: TAESKey256;
Info:string;
begin
SetLength(Info,60);
//----------------------------------------先检测文件解密是否正确-------------------
Test := TFileStream.Create(SourceFile, fmOpenRead);
try
Test.Seek(-60,soFromEnd);
Test.Read(Info[1],60);
//-----------------------------判断密码是否正确,如果错误
if AnsiContainsStr(Trim(info),EncryptString('123456789',Key)) = false then begin
result:=false;//解密失败
Test.Free;//释放流
exit;
end;
//-----------------------------如果密码正确,取得实际文件的内容
Test.Seek(0,soFromBeginning);
SFS:=TMemoryStream.Create;
SFS.CopyFrom(Test,Test.Size-60);
Test.Free;
except //-----------------------如果出现异常不能打开文件
SFS.Free;
Test.Free;
result:=false;
exit;
end;
//-------------------------------正式开始解密
SFS.Position:=0;
SFS.ReadBuffer(Size, SizeOf(Size));
DFS := TFileStream.Create(DestFile, fmCreate);
FillChar(AESKey256, SizeOf(AESKey256), 0 );
Move(PChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));
DecryptAESStreamECB(SFS, SFS.Size - SFS.Position, AESKey256, DFS);
DFS.Size := Size;
DFS.Free;
SFS.Free;
result:=true;
end;
//-----------------------【加密解密基础函数】----------------------------------------------------
分享到:
相关推荐
本资源"Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes"提供的是在Delphi编程环境中实现AES加密和解密的示例代码,其目标是与Java平台上的加解密过程保持兼容。 首先,让我们深入了解一下...
是标准的AES算法,支持在线AES加解密网站互解。 本源码从CSDN一位前辈的源码基础上做了更改,增加支持加密返回BASE64,更加完善。在此感谢原作者: http://download.csdn.net/download/qiaohaidong/9477264 需要注意...
在Delphi中实现AES加解密算法,开发者可以使用现有的加密库,如TIdCryptAES组件,或者自定义代码来实现AES算法的不同模式,如ECB、CBC、CFB、OFB等。 在描述中提到的"能与php、java顺利对接",意味着这个Delphi实现...
在Delphi编程环境中,你可以使用AES算法来确保数据的安全,无论是进行数据存储还是传输。本资源提供了在Delphi 7环境下编译通过的完整的AES算法源码,非常适合 Delphi 开发者学习和应用。 首先,AES的核心思想是...
delphi xe2 AES加密解密算法
`AESCrypts.pas` 文件很可能是实现AES加密解密功能的核心源代码文件,其中可能包含AES的初始化、加密和解密函数。这些函数可能采用了一些常见的编程结构,如使用密钥扩展过程生成加密所需的轮密钥,以及执行AES的多...
AES 是一种使用安全码进行信息加密的标准。 它支持 128 位、192 位和 256 位长度的密匙。 加密算法的实现在 ElAES.pas 单元中。 本人将其加密方法封装在 AES.pas 单元中, 只需要调用两个标准函数就可以完成字符串...
算法模式:ECB(Electronic Code Book,电子密码本) 模式 密钥长度:128位 补码方式:PKCS5Padding 加密结果编码方式:base64 ...delphi 7实现,经测试加密、解密正确,与在线网站加密、解密结果一致!
AES for Delphi 加密解密,代码在Delphi10.2.3下已调试通过。 算法模式包含: CBC(Cipher Block Chaining,加密块链) 模式、 ECB(Electronic Code Book,电子密码本) 模式 加密结果包含:十六进制、base64 补码方式:...
1.AES算法 AES-128-CBC、AES-192-CBC、AES-256-CBC; AES-128-CFB、AES-192-CFB、AES-256-CFB; AES-128-CFB1、AES-192-CFB1、AES-256-CFB1; AES-128-CFB8、AES-192-CFB8、AES-256-CFB8; AES-128-ECB、AES-192-...
标题中的"AES.rar_2007_AES_delphi_delphi aes _delphi 加解密"表明这个压缩包包含了与AES加密算法在Delphi 2007环境下实现相关的代码或资源。AES,全称为Advanced Encryption Standard(高级加密标准),是一种广泛...
以上四个函数共同构成了在Delphi中实现AES加密算法所需的基本字符串处理功能。它们分别负责了填充与去填充、以及文本与十六进制之间的转换。这些函数的正确使用对于确保AES加密过程的有效性和安全性至关重要。在实际...
例如,`AES.v1.3`可能是一个包含AES加密算法实现的Delphi 7工程文件,其中包含了加密和解密的示例代码,可以帮助开发者快速理解和应用AES算法。 使用AES加密时,需要注意以下几点: - **密钥管理**:密钥的安全存储...
在标题中提到的"C, java, delphi互解"意味着这个压缩包内包含了用C、Java和Delphi三种编程语言实现的AES加密和解密功能,而且这些实现可以相互兼容,这意味着无论你在哪个平台上或使用哪种语言,都能对加密的数据...
本组代码采用标准AES算法(基础算法引用ElAES.pas,感谢作者),代码支持AES/ECB/PKCS5Padding、AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充,Delphi与JAVA互相加解密。
在给定的“AES加解密的delphi源码”中,我们可以深入了解如何使用Delphi编程语言实现AES的加解密功能。Delphi是基于Object Pascal的集成开发环境,以其高效、快速的编译器和丰富的组件库而著名,非常适合用于开发...
DelphiXE10.3与Java互通AES加解密算法,亲测可用。支持ECB、CBC算法,支持128、192、256密匙长度,支持密匙和向量设置,支持补码方式PKCS5和PKCS7,支持16进制密文和Base64密文。
在Delphi7中,ElAES.pas是一个第三方组件,用于方便地集成AES算法。这个组件通常包含一系列的函数和过程,允许开发者轻松地对数据进行加密和解密。首先,你需要在工程中引入ElAES.pas文件,然后就可以调用相应的函数...
本资源"Delphi与Java互通AES加解密算法.zip"正专注于解决这一问题,提供了一套适用于Delphi和Java环境的AES(Advanced Encryption Standard)加解密算法,确保在两种语言之间进行安全的数据传输。 AES,即高级加密...
在 Delphi 中,通过提供的控件,开发者可以轻松地在应用程序中集成 AES 加密和解密功能。 2. **DES(Data Encryption Standard)**:DES 是一个较老的对称加密算法,使用56位的密钥。尽管已被认为不够安全,但某些...