如题

解决方案 »

  1.   

    最简单的异或运算……解密就是把程序再运行一次function EncryptOrUnEncryptfiles(FileName: string;jor:boolean):boolean;
    var
      iFileHandle: Integer;
      iFileLength: Integer;
      Buffer: PChar;
      i : integer;
      cflag:boolean;
      key:integer;
      newfilename:string;
    begin  if not fileexists(filename) then            //若文件不存在则返回
      begin
        result:=false;
        exit;
      end;
      iFileHandle := FileOpen(FileName, fmOpenRead);
      iFileLength := FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      Buffer := PChar(AllocMem(iFileLength + 1));
      iFileLength := FileRead(iFileHandle, Buffer^, iFileLength);
      FileClose(iFileHandle);
      FileSeek(iFileHandle,0,0);
      
      for i:=0 to iFileLength do        //文件主体信息异或算法一次
      begin
         (Buffer+i)^:=chr(integer((Buffer+i)^) xor key);
      end;  iFileHandle := FileCreate(FileName);
      Filewrite(iFileHandle, Buffer^, iFileLength);
      FileClose(iFileHandle);
      freemem(Buffer);
      result:=true;
    end;
      

  2.   

    短字符串的简单加密/解密 [摘录]
    const
      c1 = 52845;
      c2 = 22719;
    function Encrypt (const s: string; Key: Word) : string;
    var
      i : byte;
    begin
      Result[0] := s[0];
      for i := 1 to length (s) do
        begin
          Result[i] := Char (byte (s[i]) xor (Key shr 8));
          Key := (byte (Result[i]) + Key) * c1 + c2
        end
    end;function Decrypt (const s: string; Key: Word) : string;
    var
      i : byte;
    begin 
      Result[0] := s[0]; 
      for i := 1 to length (s) do 
        begin 
          Result[i] := Char (byte (s[i]) xor (Key shr 8)); 
          Key := (byte (s[i]) + Key) * c1 + c2 
        end 
    end; 
      

  3.   

    key 是密钥 例如 key:=35;
      

  4.   

    laihecongxi(兴哥) :
    你这段代码似乎有问题,很容易溢出。
      

  5.   

    mrfanghansheng(***Rocket***) :
    有没有对字符串加密解密的,简单点就行。
      

  6.   

    function ptom(const s:string;key:word):string;
    var
    i:byte;
    begin
    //result[0]:=s[0];
    setlength(result,length(s));
    for i:=1 to length(s) do
    begin
    result[i]:=char(byte(s[i])xor (key shr 8));
    key:=(byte(result[i])+ key)*fc1+fc2;
    end;
    end;function mtop(const s:string;key:word):string;
    var
    i:byte;
    begin
    setlength(result,length(s));
    for i:=1 to length(s) do begin
    result[i]:=char(byte(s[i])xor(key shr 8));
    key:=(byte(s[i])+key)*fc1+fc2;
    end;
    end;
      

  7.   

    忘了说了上面的fc1,fc2为秘匙,可为任意整数常量,我用的是
    fc1:=52845;
    fc2:=22719;
      

  8.   

    以上摘自<<DELPHI斑竹答疑>>
      

  9.   

    daniel007(添) :我没有收到,麻烦再发一次到[email protected]
    strongq(火血狼) :这段代码运行到key:=(byte(s[i])+key)*fc1+fc2就
          会溢出,另外,key取值多少?
      

  10.   

    楼上各位的方案都没有行通,还是我自己做个简单的,就是把各个字符
    转换成ASICC码,再加1,呵呵,能起到简单的信息屏蔽作用就行了。
    散分吧。
      

  11.   

    用CRC32也可以,比较好的方法是使用DES或者是PGP,这些网上都有资料
      

  12.   

    用 strongq(火血狼) 的应该就可以了!