各位好,有没有现成的文件名加密解密算法。情况是这样的,例如C盘下面temp文件夹有若干文件,
c:\temp\1.doc
c:\temp\2.xls
c:\temp\3.rar
c:\temp\4.ppt
等等这些文件。现在想实现把改文件夹的文件名进行加密。加密后文件为
c:\temp\xcvdfer3323333ddfdfd
c:\temp\ddfsdg3d-dsfdfsf-fdtg
c:\temp\dsfc83xcsds
c:\temp\sdfsd7788fsdfd-df5323
就是让人家看不出到底是哪个文件名的,到底是哪个扩展名。有没有现成的加密算法呢?
然后有需要的时候解密出来。例如“xcvdfer3323333ddfdfd”文件解密成“1.doc”,就是改成原来的文件名。谢谢。

解决方案 »

  1.   

    function Encode(const S: string): string;
    var
      N, I, R: Integer;
      P: PByte;
    begin
      R := Random(20)+1;
      N := 1 + R + Length(S);
      P := AllocMem(N);
      SetString(Result, nil, N*2);
      P^ := R xor 123;
      Inc(P);
      for I:=1 to R do
      begin
        P^ := Random(256);
        Inc(P)
      end;
      for I:=1 to Length(S) do
      begin
        P^ := Ord(S[I]) xor 123;
        Inc(P)
      end;
      Dec(P, N);
      BinToHex(PChar(P), PChar(Result), N);
      FreeMem(P)
    end;function Decode(const S: string): string;
    var
      I: Integer;
      P: PByte;
    begin
      SetString(Result, nil, Length(S) div 2);
      HexToBin(PChar(S), PChar(Result), Length(Result));
      I := Ord(Result[1]) xor 123;
      Delete(Result, 1, Succ(I));
      P := PByte(@Result[1]);
      for I:=1 to Length(Result) do
      begin
        P^ := P^ xor 123;
        Inc(P)
      end;
    end;function EncodeFileName(const S: string): string;
    begin
      Result := ExtractFilePath(S) + Encode(ExtractFileName(S));
      RenameFile(S, Result)
    end;function DecodeFileName(const S: string): string;
    begin
      Result := ExtractFilePath(S) + Decode(ExtractFileName(S));
      RenameFile(S, Result)
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      S: string;
    begin
      Randomize;
      
      S := 'c:\temp\1.doc';
      S := EncodeFileName(S);
      ShowMessage(S);
      S := DecodeFileName(S);
      ShowMessage(S);
    end;