P
powersun
Unregistered / Unconfirmed
GUEST, unregistred user!
//加密解密单元
unit EncryptIt;
interface
USES
Classes;
const
C1 = 52845;
C2 = 22719;
procedure EncryptFile(INFName, OutFName : String; Key : Word);
procedure DecryptFile(INFName, OutFName : String; Key : Word);
implementation
procedure EncryptFile(INFName, OutFName : String; Key : Word);
VAR
MS, SS : TMemoryStream;
X : Integer;
C : Byte;
begin
MS := TMemoryStream.Create;
SS := TMemoryStream.Create;
TRY
MS.LoadFromFile(INFName);
MS.Position := 0;
FOR X := 0 TO MS.Size - 1 DO
begin
MS.Read(C, 1);
C := (C xor (Key shr 8));
Key := (C + Key) * C1 + C2;
SS.Write(C,1);
end;
SS.SaveToFile(OutFName);
FINALLY
SS.Free;
MS.Free;
end;
end;
procedure DecryptFile(INFName, OutFName : String; Key : Word);
VAR
MS, SS : TMemoryStream;
X : Integer;
C, O : Byte;
begin
MS := TMemoryStream.Create;
SS := TMemoryStream.Create;
TRY
MS.LoadFromFile(INFName);
MS.Position := 0;
FOR X := 0 TO MS.Size - 1 DO
begin
MS.Read(C, 1);
O := C;
C := (C xor (Key shr 8));
Key := (O + Key) * C1 + C2;
SS.Write(C,1);
end;
SS.SaveToFile(OutFName);
FINALLY
SS.Free;
MS.Free;
end;
end;
end.
//调用加密解密过程
procedure TForm1.Button1Click(Sender: TObject);
var
inf,outf:string;
w:word;
begin
inf:='h:/DELPHI程序/加密/db1.mdb' ;
outf:='h:/DELPHI程序/加密/加密后.123' ;
w:=1718;
EncryptFile(inf,outf,w);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
inf,outf:string;
w:word;
begin
inf:='h:/DELPHI程序/加密/加密后.123' ;
outf:='h:/DELPHI程序/加密/解密后.mdb' ;
w:=1718;
EncryptFile(inf,outf,w);
end;
为何解密还原后,文件长度不变,但"解密后.mdb"打不开,提示“不可识别的数据库格式”!我又试着将只将一个或几个字节加解密,还是不行!
另外一个问题:对数据库内容加密时遇到一个问题:关键字段加密后会不唯一,这个问题有何算法解决?
sun_soft@sina.com
谢谢!
unit EncryptIt;
interface
USES
Classes;
const
C1 = 52845;
C2 = 22719;
procedure EncryptFile(INFName, OutFName : String; Key : Word);
procedure DecryptFile(INFName, OutFName : String; Key : Word);
implementation
procedure EncryptFile(INFName, OutFName : String; Key : Word);
VAR
MS, SS : TMemoryStream;
X : Integer;
C : Byte;
begin
MS := TMemoryStream.Create;
SS := TMemoryStream.Create;
TRY
MS.LoadFromFile(INFName);
MS.Position := 0;
FOR X := 0 TO MS.Size - 1 DO
begin
MS.Read(C, 1);
C := (C xor (Key shr 8));
Key := (C + Key) * C1 + C2;
SS.Write(C,1);
end;
SS.SaveToFile(OutFName);
FINALLY
SS.Free;
MS.Free;
end;
end;
procedure DecryptFile(INFName, OutFName : String; Key : Word);
VAR
MS, SS : TMemoryStream;
X : Integer;
C, O : Byte;
begin
MS := TMemoryStream.Create;
SS := TMemoryStream.Create;
TRY
MS.LoadFromFile(INFName);
MS.Position := 0;
FOR X := 0 TO MS.Size - 1 DO
begin
MS.Read(C, 1);
O := C;
C := (C xor (Key shr 8));
Key := (O + Key) * C1 + C2;
SS.Write(C,1);
end;
SS.SaveToFile(OutFName);
FINALLY
SS.Free;
MS.Free;
end;
end;
end.
//调用加密解密过程
procedure TForm1.Button1Click(Sender: TObject);
var
inf,outf:string;
w:word;
begin
inf:='h:/DELPHI程序/加密/db1.mdb' ;
outf:='h:/DELPHI程序/加密/加密后.123' ;
w:=1718;
EncryptFile(inf,outf,w);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
inf,outf:string;
w:word;
begin
inf:='h:/DELPHI程序/加密/加密后.123' ;
outf:='h:/DELPHI程序/加密/解密后.mdb' ;
w:=1718;
EncryptFile(inf,outf,w);
end;
为何解密还原后,文件长度不变,但"解密后.mdb"打不开,提示“不可识别的数据库格式”!我又试着将只将一个或几个字节加解密,还是不行!
另外一个问题:对数据库内容加密时遇到一个问题:关键字段加密后会不唯一,这个问题有何算法解决?
sun_soft@sina.com
谢谢!