各位好,有没有现成的文件名加密解密算法。情况是这样的,例如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”,就是改成原来的文件名。谢谢。
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”,就是改成原来的文件名。谢谢。
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;