• Delphi加密解密算法


    // 加密方法一(通过密钥加密解密)
    function EncryptString(Source, Key: string): string;
    function UnEncryptString(Source, Key: string): string;
    //加密方法二(通过移位加密解密)
    function Encode(Str: string): string;
    function Decode(Str: string): string;
    //加密方法三(异或加密解密)
    function Enc(str: string): string;
    function Dec(str: string): string;

     

    ---------------

    function TFrmRegister.EncryptString(Source, Key: string): string;
    // 对字符串加密(Source:源 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(Source) do
    begin
    SrcAsc := (Ord(Source[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 TFrmRegister.UnEncryptString(Source, 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(Source, 1, 2));
    SrcPos := 3;
    repeat
    SrcAsc := strtoint('$' + copy(Source, 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(Source);
    result := Dest;
    end;

    ----------------

     

    function TFrmRegister.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
    begin
    Result[i] := result[i - 1];
    Result[1] := TmpChr;
    end;
    end;

    function TFrmRegister.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
    begin
    Result[i] := result[i + 1];
    Result[len] := TmpChr;
    end;
    end;

    ---------

      XorKey: array[0..7] of Byte = ($B2, $09, $AA, $55, $93, $6D, $84, $47);

     

     

    function TFrmRegister.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 TFrmRegister.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;

  • 相关阅读:
    对象的继承关系在数据库中的实现方式和PowerDesigner设计
    Oracle数据库需要修改默认的Profiles,避免用户密码过期
    如何将数据库从SQL Server迁移到MySQL
    NHibernate中对同一个对象的Lazyload要设置一致
    时来运转乎
    如何用VS里的部署实现在Duwamish7安装时的自动创建数据功能
    Windows 2003里的一个小bug?
    DailyBuild全攻略"隆重"发布V1.0
    建议DuDu:实现上传图片能够以目录方式存放.
    如何在VS里的部署中执行一段 .sql 的脚本文件?
  • 原文地址:https://www.cnblogs.com/jijm123/p/10849622.html
Copyright © 2020-2023  润新知