要求对任意长度的字符串进行加密解密,加密之后的字符串可以用解密还原回来
原来我照书上(delphi 6 开发实务)写的一个程序,对加密后的有些字符串无法正确还原,比如说 '110' 加密之后再解密为'11'.
谢谢大侠的指点email: [email protected]
QQ 65113007

解决方案 »

  1.   

    function tForm1.Decrypt(const s:string):string; //key=1时为加密,0为解密
    var
       I:Integer;
    begin
       Result:='';
          for i:=1 to length(s) do
             result := result+chr(ord(s[i]) xor i xor 69);
          result := result + char(69);
    end;
    function tForm1.Decrypt1(const s:string):string; //key=1时为加密,0为解密
    var
       I:Integer;
    begin
       Result:='';
          for i:=1 to length(s) - 1 do
             result := result+chr(ord(s[i]) xor i xor 69);
    end;
      

  2.   

    加密:
    function JiaMi(jmString: string): string;
    var
     strLen,i,j: integer;
     chr: Char;
    begin
     strlen:=Length(jmString);
     j:=0;
     for i:=1 to (strlen div 2) do
     begin
      chr:=jmString[i];
      jmString[i]:=jmString[strlen-j];
      jmString[strlen-j]:=chr;
      Inc(j);
     end;
     if strlen>1 then
     begin
      chr:=jmString[1];
      jmString[1]:=jmString[2];
      jmString[2]:=chr;
     end;
     result:=jmString;
    end;解密:
    function JieMi(jmString: string): string;
    var
     strLen,i,j: integer;
     chr: Char;
    begin
     strlen:=Length(jmString);
     if strlen>1 then
     begin
      chr:=jmString[1];
      jmString[1]:=jmString[2];
      jmString[2]:=chr;
     end;
     j:=0;
     for i:=1 to (strlen div 2) do
     begin
      chr:=jmString[i];
      jmString[i]:=jmString[strlen-j];
      jmString[strlen-j]:=chr;
      Inc(j);
     end;
     result:=jmString;
    end;
      

  3.   

    //转贴//加密函数
    function Encrypt(Src:String):String;
    var KeyLen,KeyPos,Offset,SrcPos,SrcAsc:Integer;
        Dest :ShortString;
    begin
      if Src<>'' then
        begin
          KeyLen:=Length(PrivKey);
          KeyPos:=0;
          Randomize;
          Offset:=Random(256);
          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(PrivKey[KeyPos]);
              Dest:=Dest + Format('%1.2x',[SrcAsc]);
              Offset:=SrcAsc;
            end;
          Result:=Dest;
        end
      else Result:='';
    end;//解密函数
    function Decrypt(Src:String):String;
    var KeyLen,KeyPos,Offset,SrcPos,SrcAsc,TmpSrcAsc:Integer;
        Dest:String;
    begin
      if Src<>'' then
        begin
          KeyLen:=Length(PrivKey);
          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(PrivKey[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
      else Result:='';
    end;