日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

delphi mysql.pas_Delphi 一些pas

發(fā)布時(shí)間:2023/12/16 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 delphi mysql.pas_Delphi 一些pas 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(**************************************************************)

(*Advanced Encryption Standard (AES)*)

(*Interface Unit v1.3*)

(* *)

(*Copyright (c) 2002 Jorlen Young*)

(* *)

(*說(shuō)明:*)

(*基于 ElASE.pas 單元封裝*)

(* *)

(*這是一個(gè) AES 加密算法的標(biāo)準(zhǔn)接口。*)

(*調(diào)用示例:*)

(*if not EncryptStream(src, key, TStream(Dest), keybit) then*)

(*showmessage('encrypt error');*)

(* *)

(*if not DecryptStream(src, key, TStream(Dest), keybit) then*)

(*showmessage('encrypt error');*)

(* *)

(**** 一定要對(duì)Dest進(jìn)行TStream(Dest) ****)

(*==========================================================*)

(* *)

(*支持 128 / 192 / 256 位的密匙*)

(*默認(rèn)情況下按照 128 位密匙操作*)

(* *)

(**************************************************************)

unitAES;interface

{$IFDEF VER210}

{$WARN IMPLICIT_STRING_CAST OFF} //關(guān)閉警告

{$WARN IMPLICIT_STRING_CAST_LOSS OFF}

{$ENDIF}

usesSysUtils, Classes, Math, ElAES;constSDestStreamNotCreated= 'Dest stream not created.';

SEncryptStreamError= 'Encrypt stream error.';

SDecryptStreamError= 'Decrypt stream error.';typeTKeyBit=(kb128, kb192, kb256);functionStrToHex(Const str: AnsiString): AnsiString;function HexToStr(constStr: AnsiString): AnsiString;functionEncryptString(Value: AnsiString; Key: AnsiString;

KeyBit: TKeyBit=kb128): AnsiString;functionDecryptString(Value: AnsiString; Key: AnsiString;

KeyBit: TKeyBit=kb128): AnsiString;functionEncryptStream(Src: TStream; Key: AnsiString;var Dest: TStream; KeyBit: TKeyBit =kb128): Boolean;functionDecryptStream(Src: TStream; Key: AnsiString;var Dest: TStream; KeyBit: TKeyBit =kb128): Boolean;procedureEncryptFile(SourceFile, DestFile: String;

Key: AnsiString; KeyBit: TKeyBit=kb128);procedureDecryptFile(SourceFile, DestFile: String;

Key: AnsiString; KeyBit: TKeyBit=kb128);implementation

functionStrToHex(Const str: Ansistring): Ansistring;asmpush ebx

push esi

push edi

test eax,eax

jz @@Exit

mov esi,edx//保存edx值,用來(lái)產(chǎn)生新字符串的地址

mov edi,eax //保存原字符串

mov edx,[eax-4] //獲得字符串長(zhǎng)度

test edx,edx //檢查長(zhǎng)度

je @@Exit {Length(S) = 0}mov ecx,edx//保存長(zhǎng)度

Push ecxshl edx,1mov eax,esi{$IFDEF VER210}movzx ecx, word ptr [edi-12] {需要設(shè)置CodePage}

{$ENDIF}call System.@LStrSetLength//設(shè)置新串長(zhǎng)度

mov eax,esi //新字符串地址

Call UniqueString //產(chǎn)生一個(gè)唯一的新字符串,串位置在eax中

Pop ecx

@@SetHex:xor edx,edx //清空edx

mov dl, [edi] //Str字符串字符

mov ebx,edx //保存當(dāng)前的字符

shr edx,4 //右移4字節(jié),得到高8位

mov dl,byte ptr[edx+@@HexChar] //轉(zhuǎn)換成字符

mov [eax],dl //將字符串輸入到新建串中存放

and ebx,$0F //獲得低8位

mov dl,byte ptr[ebx+@@HexChar] //轉(zhuǎn)換成字符

inc eax //移動(dòng)一個(gè)字節(jié),存放低位

mov [eax],dl

inc edi

inc eax

loop @@SetHex

@@Exit:

pop edi

pop esi

pop ebx

ret

@@HexChar: db'0123456789ABCDEF'

end;function HexToStr(constStr: AnsiString): AnsiString;asmpush ebx

push edi

push esi

test eax,eax//為空串

jz @@Exit

mov edi,eax

mov esi,edx

mov edx,[eax-4]

test edx,edx

je @@Exit

mov ecx,edx

push ecxshr edx,1mov eax,esi//開始構(gòu)造字符串

{$IFDEF VER210}movzx ecx, word ptr [edi-12] {需要設(shè)置CodePage}

{$ENDIF}call System.@LStrSetLength//設(shè)置新串長(zhǎng)度

mov eax,esi //新字符串地址

Call UniqueString //產(chǎn)生一個(gè)唯一的新字符串,串位置在eax中

Pop ecxxorebx,ebxxoresi,esi

@@CharFromHex:xoredx,edx

mov dl, [edi]//Str字符串字符

cmp dl, '0' //查看是否在0到f之間的字符

JB @@Exit //小于0,退出

cmp dl,'9' //小于=9

ja @@DoChar//CompOkNum

sub dl,'0'jmp @@DoConvert

@@DoChar://先轉(zhuǎn)成大寫字符

anddl,$DF

cmp dl,'F'ja @@Exit//大于F退出

add dl,10sub dl,'A'@@DoConvert://轉(zhuǎn)化

inc ebx

cmp ebx,2je @@Num1xoresi,esishl edx,4mov esi,edx

jmp @@Num2

@@Num1:

add esi,edx

mov edx,esi

mov [eax],dlxorebx,ebx

inc eax

@@Num2:

dec ecx

inc edi

test ecx,ecx

jnz @@CharFromHex

@@Exit:

pop esi

pop edi

pop ebxend;{-- 字符串加密函數(shù) 默認(rèn)按照 128 位密匙加密 --}

functionEncryptString(Value: AnsiString; Key: AnsiString;

KeyBit: TKeyBit=kb128): AnsiString;var

{$IFDEF VER210}SS,DS: TMemoryStream;{$ELSE}SS, DS: TStringStream;{$ENDIF}Size: Int64;

AESKey128: TAESKey128;

AESKey192: TAESKey192;

AESKey256: TAESKey256;

st: AnsiString;beginResult := '';{$IFDEF VER210}ss := TMemoryStream.Create;

SS.WriteBuffer(PAnsiChar(Value)^,Length(Value));

DS := TMemoryStream.Create;{$ELSE}SS := TStringStream.Create(Value);

DS := TStringStream.Create('');{$ENDIF}

trySize :=SS.Size;

DS.WriteBuffer(Size, SizeOf(Size));{-- 128 位密匙最大長(zhǎng)度為 16 個(gè)字符 --}

if KeyBit = kb128 then

beginFillChar(AESKey128, SizeOf(AESKey128),0);

Move(PAnsiChar(Key)^, AESKey128, Min(SizeOf(AESKey128), Length(Key)));

EncryptAESStreamECB(SS,0, AESKey128, DS);end;{-- 192 位密匙最大長(zhǎng)度為 24 個(gè)字符 --}

if KeyBit = kb192 then

beginFillChar(AESKey192, SizeOf(AESKey192),0);

Move(PAnsiChar(Key)^, AESKey192, Min(SizeOf(AESKey192), Length(Key)));

EncryptAESStreamECB(SS,0, AESKey192, DS);end;{-- 256 位密匙最大長(zhǎng)度為 32 個(gè)字符 --}

if KeyBit = kb256 then

beginFillChar(AESKey256, SizeOf(AESKey256),0);

Move(PAnsiChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));

EncryptAESStreamECB(SS,0, AESKey256, DS);end;{$IFDEF VER210}SetLength(st,Ds.Size);

DS.Position := 0;

DS.ReadBuffer(PAnsiChar(st)^,DS.Size);

Result :=StrToHex(st);{$ELSE}Result :=StrToHex(DS.DataString);{$ENDIF}

finallySS.Free;

DS.Free;end;end;{-- 字符串解密函數(shù) 默認(rèn)按照 128 位密匙解密 --}

functionDecryptString(Value: AnsiString; Key: AnsiString;

KeyBit: TKeyBit=kb128): AnsiString;varSS, DS: TStringStream;

Size: Int64;

AESKey128: TAESKey128;

AESKey192: TAESKey192;

AESKey256: TAESKey256;beginResult := '';

SS := TStringStream.Create(HexToStr(Value));

DS := TStringStream.Create('');trySize :=SS.Size;

SS.ReadBuffer(Size, SizeOf(Size));{-- 128 位密匙最大長(zhǎng)度為 16 個(gè)字符 --}

if KeyBit = kb128 then

beginFillChar(AESKey128, SizeOf(AESKey128),0);

Move(PAnsiChar(Key)^, AESKey128, Min(SizeOf(AESKey128), Length(Key)));

DecryptAESStreamECB(SS, SS.Size-SS.Position, AESKey128, DS);end;{-- 192 位密匙最大長(zhǎng)度為 24 個(gè)字符 --}

if KeyBit = kb192 then

beginFillChar(AESKey192, SizeOf(AESKey192),0);

Move(PAnsiChar(Key)^, AESKey192, Min(SizeOf(AESKey192), Length(Key)));

DecryptAESStreamECB(SS, SS.Size-SS.Position, AESKey192, DS);end;{-- 256 位密匙最大長(zhǎng)度為 32 個(gè)字符 --}

if KeyBit = kb256 then

beginFillChar(AESKey256, SizeOf(AESKey256),0);

Move(PAnsiChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));

DecryptAESStreamECB(SS, SS.Size-SS.Position, AESKey256, DS);end;

Result :=DS.DataString;finallySS.Free;

DS.Free;end;end;{流加密函數(shù), default keybit: 128bit}

functionEncryptStream(Src: TStream; Key: AnsiString;var Dest: TStream; KeyBit: TKeyBit =kb128): Boolean;varCount: Int64;

AESKey128: TAESKey128;

AESKey192: TAESKey192;

AESKey256: TAESKey256;begin

if Dest = nil then

begin

raise Exception.Create(SDestStreamNotCreated);

Result:=False;

Exit;end;trySrc.Position:= 0;

Count:=Src.Size;

Dest.Write(Count, SizeOf(Count));{-- 128 位密匙最大長(zhǎng)度為 16 個(gè)字符 --}

if KeyBit = kb128 then

beginFillChar(AESKey128, SizeOf(AESKey128),0);

Move(PAnsiChar(Key)^, AESKey128, Min(SizeOf(AESKey128), Length(Key)));

EncryptAESStreamECB(Src,0, AESKey128, Dest);end;{-- 192 位密匙最大長(zhǎng)度為 24 個(gè)字符 --}

if KeyBit = kb192 then

beginFillChar(AESKey192, SizeOf(AESKey192),0);

Move(PAnsiChar(Key)^, AESKey192, Min(SizeOf(AESKey192), Length(Key)));

EncryptAESStreamECB(Src,0, AESKey192, Dest);end;{-- 256 位密匙最大長(zhǎng)度為 32 個(gè)字符 --}

if KeyBit = kb256 then

beginFillChar(AESKey256, SizeOf(AESKey256),0);

Move(PAnsiChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));

EncryptAESStreamECB(Src,0, AESKey256, Dest);end;

Result :=True;except

raise Exception.Create(SEncryptStreamError);

Result:=False;end;end;{流解密函數(shù), default keybit: 128bit}

functionDecryptStream(Src: TStream; Key: AnsiString;var Dest: TStream; KeyBit: TKeyBit =kb128): Boolean;varCount, OutPos: Int64;

AESKey128: TAESKey128;

AESKey192: TAESKey192;

AESKey256: TAESKey256;begin

if Dest = nil then

begin

raise Exception.Create(SDestStreamNotCreated);

Result:=False;

Exit;end;trySrc.Position:= 0;

OutPos:=Dest.Position;

Src.ReadBuffer(Count, SizeOf(Count));{-- 128 位密匙最大長(zhǎng)度為 16 個(gè)字符 --}

if KeyBit = kb128 then

beginFillChar(AESKey128, SizeOf(AESKey128),0);

Move(PAnsiChar(Key)^, AESKey128, Min(SizeOf(AESKey128), Length(Key)));

DecryptAESStreamECB(Src, Src.Size-Src.Position,

AESKey128, Dest);end;{-- 192 位密匙最大長(zhǎng)度為 24 個(gè)字符 --}

if KeyBit = kb192 then

beginFillChar(AESKey192, SizeOf(AESKey192),0);

Move(PAnsiChar(Key)^, AESKey192, Min(SizeOf(AESKey192), Length(Key)));

DecryptAESStreamECB(Src, Src.Size-Src.Position,

AESKey192, Dest);end;{-- 256 位密匙最大長(zhǎng)度為 32 個(gè)字符 --}

if KeyBit = kb256 then

beginFillChar(AESKey256, SizeOf(AESKey256),0);

Move(PAnsiChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));

DecryptAESStreamECB(Src, Src.Size-Src.Position,

AESKey256, Dest);end;

Dest.Size := OutPos +Count;

Dest.Position :=OutPos;

Result :=True;except

raise Exception.Create(SDecryptStreamError);

Result:=False;end;end;{-- 文件加密函數(shù) 默認(rèn)按照 128 位密匙解密 --}

procedureEncryptFile(SourceFile, DestFile: String;

Key: AnsiString; KeyBit: TKeyBit=kb128);varSFS, DFS: TFileStream;

Size: Int64;

AESKey128: TAESKey128;

AESKey192: TAESKey192;

AESKey256: TAESKey256;beginSFS := TFileStream.Create(SourceFile, fmOpenRead);tryDFS := TFileStream.Create(DestFile, fmCreate);trySize :=SFS.Size;

DFS.WriteBuffer(Size, SizeOf(Size));{-- 128 位密匙最大長(zhǎng)度為 16 個(gè)字符 --}

if KeyBit = kb128 then

beginFillChar(AESKey128, SizeOf(AESKey128),0);

Move(PAnsiChar(Key)^, AESKey128, Min(SizeOf(AESKey128), Length(Key)));

EncryptAESStreamECB(SFS,0, AESKey128, DFS);end;{-- 192 位密匙最大長(zhǎng)度為 24 個(gè)字符 --}

if KeyBit = kb192 then

beginFillChar(AESKey192, SizeOf(AESKey192),0);

Move(PAnsiChar(Key)^, AESKey192, Min(SizeOf(AESKey192), Length(Key)));

EncryptAESStreamECB(SFS,0, AESKey192, DFS);end;{-- 256 位密匙最大長(zhǎng)度為 32 個(gè)字符 --}

if KeyBit = kb256 then

beginFillChar(AESKey256, SizeOf(AESKey256),0);

Move(PAnsiChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));

EncryptAESStreamECB(SFS,0, AESKey256, DFS);end;finallyDFS.Free;end;finallySFS.Free;end;end;{-- 文件解密函數(shù) 默認(rèn)按照 128 位密匙解密 --}

procedureDecryptFile(SourceFile, DestFile: String;

Key: AnsiString; KeyBit: TKeyBit=kb128);varSFS, DFS: TFileStream;

Size: Int64;

AESKey128: TAESKey128;

AESKey192: TAESKey192;

AESKey256: TAESKey256;beginSFS := TFileStream.Create(SourceFile, fmOpenRead);trySFS.ReadBuffer(Size, SizeOf(Size));

DFS := TFileStream.Create(DestFile, fmCreate);try

{-- 128 位密匙最大長(zhǎng)度為 16 個(gè)字符 --}

if KeyBit = kb128 then

beginFillChar(AESKey128, SizeOf(AESKey128),0);

Move(PAnsiChar(Key)^, AESKey128, Min(SizeOf(AESKey128), Length(Key)));

DecryptAESStreamECB(SFS, SFS.Size-SFS.Position, AESKey128, DFS);end;{-- 192 位密匙最大長(zhǎng)度為 24 個(gè)字符 --}

if KeyBit = kb192 then

beginFillChar(AESKey192, SizeOf(AESKey192),0);

Move(PAnsiChar(Key)^, AESKey192, Min(SizeOf(AESKey192), Length(Key)));

DecryptAESStreamECB(SFS, SFS.Size-SFS.Position, AESKey192, DFS);end;{-- 256 位密匙最大長(zhǎng)度為 32 個(gè)字符 --}

if KeyBit = kb256 then

beginFillChar(AESKey256, SizeOf(AESKey256),0);

Move(PAnsiChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key)));

DecryptAESStreamECB(SFS, SFS.Size-SFS.Position, AESKey256, DFS);end;

DFS.Size :=Size;finallyDFS.Free;end;finallySFS.Free;end;end;end.

總結(jié)

以上是生活随笔為你收集整理的delphi mysql.pas_Delphi 一些pas的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。