• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

delphi实现的动态加密解密,轻量级,可用于byte和string。

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

type
TByteArr = array of byte;//单元头定义


function
Byte2Hex2(arrByte:TByteArr):string; var i:integer; begin for i:=0 to length(arrByte)-1 do begin Result := Result + Copy( IntToHex(arrByte[i],16),15,2) end; end; function StrToByte(const Value: String): TByteArr; var I: integer; begin SetLength(Result, Length(Value)); for I := 0 to Length(Value) - 1 do Result[I] := ord(Value[I + 1]); end; function ByteToString(const Value: TByteArr): String; var I: integer; S : String; Letra: char; begin S := ''; for I := Length(Value)-1 Downto 0 do begin letra := Chr(Value[I] ); S := letra + S; end; Result := S; end; function DynamicDec(resource:TByteArr;key:string): TByteArr; var arrbyte,Rndbyte,RndbyteKey,pBytes,pBytes1,cbtemp: TByteArr; lenKey,Lenresource,posInt,I,m,n:integer; begin Lenresource:=length(resource); if Lenresource>8 then begin if key='' then key:='QWERTYUIOPLKJHGFFDSAZXCVBNM~!@#$%^&*()_+-='; arrbyte:=strToByte(key); lenKey:=length(arrbyte); if lenKey>0 then begin //posInt:=0; SetLength(pBytes,4); SetLength(pBytes1,4); for i := 0 to 7 do begin if i<4 then begin pBytes[i]:=resource[i]; end else begin pBytes1[i-4]:=resource[i]; end; end; posInt:=PInteger(pBytes)^ xor PInteger(pBytes1)^; posInt:=not (posInt) ; SetLength(Rndbyte,4); SetLength(RndbyteKey,4); for I := 4 to 7 do begin Rndbyte[i-4]:=resource[i]; RndbyteKey[i-4]:= resource[i] xor posInt; end; m:=0; for I := 0 to lenKey-1 do begin m:=m+1; if m>4 then m:=1 ; arrbyte[i]:=arrbyte[i] xor Rndbyte[m-1]; end; SetLength(cbtemp,Lenresource-8); for I := 8 to Lenresource-1 do begin m:=m+1; if m>4 then m:=1 ; resource[i]:=resource[i] xor RndbyteKey[m-1] ; for n := 0 to lenKey-1 do begin resource[i]:=resource[i] xor arrbyte[n] ; end; cbtemp[i-8]:=resource[i]; end; end; end; result:=cbtemp; end; function DynamicEnc(resource:TByteArr;key:string): TByteArr; var arrbyte,Rndbyte,temp: TByteArr; lenKey,Lenresource,I,m,n,ValueRand:integer; FBytes : TByteArr; begin Randomize; if key='' then key:='QWERTYUIOPLKJHGFFDSAZXCVBNM~!@#$%^&*()_+-='; SetLength(Rndbyte,4); SetLength(temp,4); arrbyte:=strToByte(key); lenKey:=length(arrbyte); Lenresource:=length(resource); ValueRand:=random(255); for i:= 0 to 3 do begin Rndbyte[i]:=random(255) ; temp[i]:=Rndbyte[i] ; end; if (lenKey>0) and (lenresource>0) then begin for I := 0 to 3 do Rndbyte[i]:=Rndbyte[i] xor ValueRand ; m:=0; for I := 0 to lenKey-1 do begin m:=m+1; if m>4 then m:=1; arrbyte[i]:=arrbyte[i] xor Rndbyte[m-1]; end; for I := 0 to Lenresource-1 do begin m:=m+1; if m>4 then m:=1; for n := 0 to lenKey-1 do begin resource[i]:= (resource[i]) xor arrbyte[n]; end; resource[i]:= resource[i] xor temp[m-1]; end; ValueRand:= not ValueRand ; ValueRand:= ValueRand xor PInteger(Rndbyte)^; SetLength(FBytes,4); Move(ValueRand, FBytes[0], SizeOf(FBytes)); resource:=FBytes+Rndbyte+resource; end; result:=resource; end;

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap