大家有没有好的加密方法,如加密‘293b-15d9’。最好显示的不是乱码。

解决方案 »

  1.   

    Function EncrypKey (Src:String; Key:String):string;
    var
      KeyLen :Integer;
      KeyPos :Integer;
      offset :Integer;
      dest :string;
      SrcPos :Integer;
      SrcAsc :Integer;
      Range :Integer;
    begin
      KeyLen:=Length(Key);
      if KeyLen = 0 then
        key:='Think Space';
      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 UncrypKey (Src:String; Key:String):string;
    var
      KeyLen :Integer;
      KeyPos :Integer;
      offset :Integer;
      dest :string;
      SrcPos :Integer;
      SrcAsc:Integer;
      TmpSrcAsc :Integer;
    begin
      KeyLen:=Length(Key);
      if KeyLen = 0 then
        key:='Think Space';
      KeyPos:=0;
      offset:=StrToInt('$'+ copy(src,1,2));
      SrcPos:=3;
      repeat
        try
          SrcAsc:=StrToInt('$'+ copy(src,SrcPos,2));
        except    end;
        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;