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


    
    

    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;

  • 相关阅读:
    python中if __name__ == '__main__': 的解析
    python项目练习地址
    HTTP Response Splitting攻击探究 <转>
    常用操作系统扫描工具介绍
    app兼容性测试的几种方案
    svn自动备份并上传到ftp
    有关交易的性能测试点
    修改文件测试的测试点
    新增文件测试的测试点
    添加附件测试的测试点
  • 原文地址:https://www.cnblogs.com/leisure520/p/7894235.html
Copyright © 2020-2023  润新知