java delphi aes加密算法_谁有C#与delphi通用的AES加密算法
展開全部
unit?AES;
interface
uses
SysUtils,?Classes,?Math,?ElAES;
type
TKeyBit?=?(kb128,?kb192,?kb256);
function?StrToHex(Value:?string):?string;
function?HexToStr(Value:?string):?string;
function?EncryptString(Value:?string;?Key:?string;
KeyBit:?TKeyBit?=?kb128):?string;
function?DecryptString(Value:?string;?Key:?string;
KeyBit:?TKeyBit?=?kb128):?string;
function?EncryptStream(Stream:?TStream;?Key:?string;
KeyBit:?TKeyBit?=?kb128):?TStream;
function?DecryptStream(Stream:?TStream;?Key:?string;
KeyBit:?TKeyBit?=?kb128):?TStream;
procedure?EncryptFile(SourceFile,?DestFile:?string;
Key:?string;?KeyBit:?TKeyBit?=?kb128);
procedure?DecryptFile(SourceFile,?DestFile:?string;
Key:?string;?KeyBit:?TKeyBit?=?kb128);
implementation
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?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;
{??--??字符62616964757a686964616fe4b893e5b19e31333363363438串加密函數?默認按照?128?位密匙加密?--??}
function?EncryptString(Value:?string;?Key:?string;
KeyBit:?TKeyBit?=?kb128):?string;
var
SS,?DS:?TStringStream;
Size:?Int64;
AESKey128:?TAESKey128;
AESKey192:?TAESKey192;
AESKey256:?TAESKey256;
begin
Result?:=?'';
SS?:=?TStringStream.Create(Value);
DS?:=?TStringStream.Create('');
try
Size?:=?SS.Size;
DS.WriteBuffer(Size,?SizeOf(Size));
{??--??128?位密匙最大長度為?16?個字符?--??}
if?KeyBit?=?kb128?then
begin
FillChar(AESKey128,?SizeOf(AESKey128),?0?);
Move(PChar(Key)^,?AESKey128,?Min(SizeOf(AESKey128),?Length(Key)));
EncryptAESStreamECB(SS,?0,?AESKey128,?DS);
end;
{??--??192?位密匙最大長度為?24?個字符?--??}
if?KeyBit?=?kb192?then
begin
FillChar(AESKey192,?SizeOf(AESKey192),?0?);
Move(PChar(Key)^,?AESKey192,?Min(SizeOf(AESKey192),?Length(Key)));
EncryptAESStreamECB(SS,?0,?AESKey192,?DS);
end;
{??--??256?位密匙最大長度為?32?個字符?--??}
if?KeyBit?=?kb256?then
begin
FillChar(AESKey256,?SizeOf(AESKey256),?0?);
Move(PChar(Key)^,?AESKey256,?Min(SizeOf(AESKey256),?Length(Key)));
EncryptAESStreamECB(SS,?0,?AESKey256,?DS);
end;
Result?:=?StrToHex(DS.DataString);
finally
SS.Free;
DS.Free;
end;
end;
{??--??字符串解密函數?默認按照?128?位密匙解密?--??}
function?DecryptString(Value:?string;?Key:?string;
KeyBit:?TKeyBit?=?kb128):?string;
var
SS,?DS:?TStringStream;
Size:?Int64;
AESKey128:?TAESKey128;
AESKey192:?TAESKey192;
AESKey256:?TAESKey256;
begin
Result?:=?'';
SS?:=?TStringStream.Create(HexToStr(Value));
DS?:=?TStringStream.Create('');
try
Size?:=?SS.Size;
SS.ReadBuffer(Size,?SizeOf(Size));
{??--??128?位密匙最大長度為?16?個字符?--??}
if?KeyBit?=?kb128?then
begin
FillChar(AESKey128,?SizeOf(AESKey128),?0?);
Move(PChar(Key)^,?AESKey128,?Min(SizeOf(AESKey128),?Length(Key)));
DecryptAESStreamECB(SS,?SS.Size?-?SS.Position,?AESKey128,?DS);
end;
{??--??192?位密匙最大長度為?24?個字符?--??}
if?KeyBit?=?kb192?then
begin
FillChar(AESKey192,?SizeOf(AESKey192),?0?);
Move(PChar(Key)^,?AESKey192,?Min(SizeOf(AESKey192),?Length(Key)));
DecryptAESStreamECB(SS,?SS.Size?-?SS.Position,?AESKey192,?DS);
end;
{??--??256?位密匙最大長度為?32?個字符?--??}
if?KeyBit?=?kb256?then
begin
FillChar(AESKey256,?SizeOf(AESKey256),?0?);
Move(PChar(Key)^,?AESKey256,?Min(SizeOf(AESKey256),?Length(Key)));
DecryptAESStreamECB(SS,?SS.Size?-?SS.Position,?AESKey256,?DS);
end;
Result?:=?DS.DataString;
finally
SS.Free;
DS.Free;
end;
end;
{??--??流加密函數?默認按照?128?位密匙解密?--??}
function?EncryptStream(Stream:?TStream;?Key:?string;
KeyBit:?TKeyBit?=?kb128):?TStream;
var
Count:?Int64;
OutStrm:?TStream;
AESKey128:?TAESKey128;
AESKey192:?TAESKey192;
AESKey256:?TAESKey256;
begin
OutStrm?:=?TStream.Create;
Stream.Position?:=?0;
Count?:=?Stream.Size;
OutStrm.Write(Count,?SizeOf(Count));
try
{??--??128?位密匙最大長度為?16?個字符?--??}
if?KeyBit?=?kb128?then
begin
FillChar(AESKey128,?SizeOf(AESKey128),?0?);
Move(PChar(Key)^,?AESKey128,?Min(SizeOf(AESKey128),?Length(Key)));
EncryptAESStreamECB(Stream,?0,?AESKey128,?OutStrm);
end;
{??--??192?位密匙最大長度為?24?個字符?--??}
if?KeyBit?=?kb192?then
begin
FillChar(AESKey192,?SizeOf(AESKey192),?0?);
Move(PChar(Key)^,?AESKey192,?Min(SizeOf(AESKey192),?Length(Key)));
EncryptAESStreamECB(Stream,?0,?AESKey192,?OutStrm);
end;
{??--??256?位密匙最大長度為?32?個字符?--??}
if?KeyBit?=?kb256?then
begin
FillChar(AESKey256,?SizeOf(AESKey256),?0?);
Move(PChar(Key)^,?AESKey256,?Min(SizeOf(AESKey256),?Length(Key)));
EncryptAESStreamECB(Stream,?0,?AESKey256,?OutStrm);
end;
Result?:=?OutStrm;
finally
OutStrm.Free;
end;
end;
{??--??流解密函數?默認按照?128?位密匙解密?--??}
function?DecryptStream(Stream:?TStream;?Key:?string;
KeyBit:?TKeyBit?=?kb128):?TStream;
var
Count,?OutPos:?Int64;
OutStrm:?TStream;
AESKey128:?TAESKey128;
AESKey192:?TAESKey192;
AESKey256:?TAESKey256;
begin
OutStrm?:=?TStream.Create;
Stream.Position?:=?0;
OutPos?:=OutStrm.Position;
Stream.ReadBuffer(Count,?SizeOf(Count));
try
{??--??128?位密匙最大長度為?16?個字符?--??}
if?KeyBit?=?kb128?then
begin
FillChar(AESKey128,?SizeOf(AESKey128),?0?);
Move(PChar(Key)^,?AESKey128,?Min(SizeOf(AESKey128),?Length(Key)));
DecryptAESStreamECB(Stream,?Stream.Size?-?Stream.Position,
AESKey128,?OutStrm);
end;
{??--??192?位密匙最大長度為?24?個字符?--??}
if?KeyBit?=?kb192?then
begin
FillChar(AESKey192,?SizeOf(AESKey192),?0?);
Move(PChar(Key)^,?AESKey192,?Min(SizeOf(AESKey192),?Length(Key)));
DecryptAESStreamECB(Stream,?Stream.Size?-?Stream.Position,
AESKey192,?OutStrm);
end;
{??--??256?位密匙最大長度為?32?個字符?--??}
if?KeyBit?=?kb256?then
begin
FillChar(AESKey256,?SizeOf(AESKey256),?0?);
Move(PChar(Key)^,?AESKey256,?Min(SizeOf(AESKey256),?Length(Key)));
DecryptAESStreamECB(Stream,?Stream.Size?-?Stream.Position,
AESKey256,?OutStrm);
end;
OutStrm.Size?:=?OutPos?+?Count;
OutStrm.Position?:=?OutPos;
Result?:=?OutStrm;
finally
OutStrm.Free;
end;
end;
總結
以上是生活随笔為你收集整理的java delphi aes加密算法_谁有C#与delphi通用的AES加密算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电子病历的定义
- 下一篇: c# chart 各个属性_c# Cha