zoukankan      html  css  js  c++  java
  • 从网上整理的一些delphi字符串加密解密方法

    function Encode(Str: string): string;

    var //加密

      TmpChr: AnsiChar;

      i, Len: integer;

    begin

      Result := Str;

      Len := Length(Result);

      TmpChr := Result[1];

      for i := 1 to Len - 1 do

        Result[i] := Result[i + 1];

      Result[Len] := TmpChr;

    end;

    function Decode(Str: string): string;

    var //解密

      TmpChr: AnsiChar;

      i, Len: integer;

    begin

      Result := Str;

      Len := Length(Result);

      TmpChr := Result[Len];

      for i := Len downto 2 do

        Result[i] := Result[i - 1];

      Result[1] := TmpChr;

    end;

    {异或 加密解密}

    const // 首先定义一个常量数组

      XorKey: array[0..7] of Byte = ($B2, $91, $AA, $55, $93, $6D, $84, $47); //字符串加密用

    //数组的值可以自己改

    function Enc(Str: string): string; //字符加密函数   这是用的一个异或加密

    var

      i, j: Integer;

    begin

      Result := '';

      j := 0;

      for i := 1 to Length(Str) do

      begin

        Result := Result + IntToHex(Byte(Str[i]) xor XorKey[j], 2);

        j := (j + 1) mod 8;

      end;

    end;

    function Dec(Str: string): string; //字符解密函数

    var

      i, j: Integer;

    begin

      Result := '';

      j := 0;

      for i := 1 to Length(Str) div 2 do

      begin

        Result := Result + Char(StrToInt('$' + Copy(Str, i * 2 - 1, 2)) xor XorKey[j]);

        j := (j + 1) mod 8;

      end;

    end;

    function Crypt(s: string; Key: Word;

      const bEncrypt: boolean): string;

    const

      SeedA = 787; ///   常量,你可以修改

      SeedB = 787; ///   常量,你可以修改

    var

      i: integer;

      ps, pr: ^byte;

    begin

      if bEncrypt then

        s := s + #0;

      SetLength(Result, Length(s));

      ps := @s[1];

      pr := @Result[1];

      for i := 1 to length(s) do

      begin

        pr^ := ps^ xor (Key shr 8);

        if bEncrypt then

          Key := (pr^ + Key) * SeedA + SeedB

        else

          Key := (ps^ + Key) * SeedA + SeedB;

        pr := pointer(integer(pr) + 1);

        ps := pointer(integer(ps) + 1);

      end;

    end;

    ///////////////////

    function EncrypStr(Src, Key: string): string; //字符串加密函数

    //对字符串加密(Src:源 Key:密匙)

    var KeyLen: Integer;

      KeyPos: Integer;

      offset: Integer;

      dest: string;

      SrcPos: Integer;

      SrcAsc: Integer;

      Range: Integer;

    begin

      KeyLen := Length(Key);

      if KeyLen = 0 then key := 'delphi';

      KeyPos := 0;

      Range := 256;

      Randomize;

      offset := Random(Range);

      dest := format('%1.2x', [offset]);

      for SrcPos := 1 to Length(Src) do

      begin

        SrcAsc := (Ord(Src[SrcPos]) + offset) mod 255;

        if KeyPos < KeyLen

          then KeyPos := KeyPos + 1

        else KeyPos := 1;

        SrcAsc := SrcAsc xor Ord(Key[KeyPos]);

        dest := dest + format('%1.2x', [SrcAsc]);

        offset := SrcAsc;

      end;

      Result := Dest;

    end;

    function UncrypStr(Src, Key: string): string; //字符串解密函数

    //对字符串解密(Src:源 Key:密匙)

    var KeyLen: Integer;

      KeyPos: Integer;

      offset: Integer;

      dest: string;

      SrcPos: Integer;

      SrcAsc: Integer;

      TmpSrcAsc: Integer;

    begin

      KeyLen := Length(Key);

      if KeyLen = 0 then key := 'delphi';

      KeyPos := 0;

      offset := StrToInt('$' + copy(src, 1, 2));

      SrcPos := 3;

      repeat

        SrcAsc := StrToInt('$' + copy(src, SrcPos, 2));

        if KeyPos < KeyLen

          then KeyPos := KeyPos + 1

        else KeyPos := 1;

        TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);

        if TmpSrcAsc <= offset

          then TmpSrcAsc := 255 + TmpSrcAsc - offset

        else TmpSrcAsc := TmpSrcAsc - offset;

        dest := dest + chr(TmpSrcAsc);

        offset := srcAsc;

        SrcPos := SrcPos + 2;

      until SrcPos >= Length(Src);

      Result := Dest;

    end;

    //********************************************************

    //             加密解密 (利用异或运算)    (方式2)

    //********************************************************

    function encryptstr(const s: string; skey: string): string; //加密

    var

      i, j: integer;

      hexS, hexskey, midS, tmpstr: string;

      a, b, c: byte;

    begin

      hexS := myStrtoHex(s);

      hexskey := myStrtoHex(skey);

      midS := hexS;

      for i := 1 to (length(hexskey) div 2) do

      begin

        if i <> 1 then midS := tmpstr;

        tmpstr := '';

        for j := 1 to (length(midS) div 2) do

        begin

          a := strtoint('$' + midS[2 * j - 1] + midS[2 * j]);

          b := strtoint('$' + hexskey[2 * i - 1] + hexskey[2 * i]);

          c := a xor b;

          tmpstr := tmpstr + myStrtoHex(chr(c));

        end;

      end;

      result := tmpstr;

    end;

    function decryptstr(const s: string; skey: string): string; //解密

    var

      i, j: integer;

      hexS, hexskey, midS, tmpstr: string;

      a, b, c: byte;

    begin

      hexS := s; //应该是该字符串

      if length(hexS) mod 2 = 1 then

      begin

        showmessage('密文错误!');

        exit;

      end;

      hexskey := myStrtoHex(skey);

      tmpstr := hexS;

      midS := hexS;

      for i := (length(hexskey) div 2) downto 1 do

      begin

        if i <> (length(hexskey) div 2) then midS := tmpstr;

        tmpstr := '';

        for j := 1 to (length(midS) div 2) do

        begin

          a := strtoint('$' + midS[2 * j - 1] + midS[2 * j]);

          b := strtoint('$' + hexskey[2 * i - 1] + hexskey[2 * i]);

          c := a xor b;

          tmpstr := tmpstr + myStrtoHex(chr(c));

        end;

      end;

      result := myHextoStr(tmpstr);

    end;

    没有一个个去研究,调试。以后在时间在慢慢试。

    (完)

  • 相关阅读:
    python实现斑马打印机网络打印
    深入理解Nginx-模块开发与架构解析(第2版)第二章
    深入理解Nginx-模块开发与架构解析(第2版)第一章
    Django Web应用开发实战附录A
    Django Web应用开发实战第十六章
    Django Web应用开发实战第十一章
    Django Web应用开发实战第七章
    Django Web应用开发实战第五章
    Django Web应用开发实战第四章
    2017-2018-2 20179213《网络攻防》第一周作业
  • 原文地址:https://www.cnblogs.com/jijm123/p/7444283.html
Copyright © 2011-2022 走看看