当前位置:主页>仓库管理软件> 列表

连接数据库udl文件读取及加密解密 找股票软件销售方法

进销存软件版1楼: udl文件读取加密
我们用udl连接数据库,但udl不安全,可以用记事本打开,其中就有数据库的用户密码信息.怎样实现加密.
用INI加密不爽,要求做到直接加密udl文件
我这样去读udl文件,读不出来结果如下:
读udl代码:
var
filename:string;
begin
FileName:=ExtractFilePath(Application.ExeName)+''wxdb.udl'';
With memo1.Lines do
begin
LoadFromFile(FileName);
SaveToFile(ChangeFileExt(FileName,''BAK''));
end;
在memo里的结果是这样的:??
不明白,用tstring读也一样,搞不来.我的环境,delphi7+window2003
udl文件内容如下,记事本打开
[oledb]
; Everything after this line is an OLE DB initstring
Provider=SQLOLEDB.1;Password=10251119;Persist Security Info=True;User ID=jamily;Initial Catalog=wx2004;Data Source=192.168.0.101
我的想法是先读出udl,将它加密成一个密文文件,再用密文文件来连接数据库.像万象2004网管(网吧 如管理软件)哪一样.

2楼: 把加密的连接信息读到内存中,解密后,再连接数据库嘛。 如股票软件销售方法

3楼: 把可变的部分(一般是文件路径和数据源)放在INI文件中
不变的部分放在程序代码中直接写。

4楼: 没有达到我的要求,用ini不爽,用ini你要分节,容易被人破.我要整个udl文件加密,
以下有一代码来自:http://bbs.penglai.net.cn/printpage.asp?BoardID=23&ID=3768
它可以加密文件成文件,可以解密文件成文件,可以压缩/解压文件到流,// 压缩/解压流
怎么可以把加密文件解压成字符串就好了.高手帮看一下.
unit uCompress;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, ComCtrls, Dialogs;

// 压缩/解压文件
procedure CompressFile(Source, Target: String); stdcall;
procedure DecompressFile(Source, Target: String); stdcall;

// 压缩/解压文件到流
procedure CompressToStream(FileName: String; Stream: TStream); stdcall;
procedure DecompressToStream(FileName: String; Stream: TStream); stdcall;

// 压缩/解压流
procedure CompressStream(InStream, OutStream: TStream); stdcall;
procedure DecompressStream(InStream, OutStream: TStream); stdcall;

implementation

uses
ZLib;

const
COMPRESS_ERROR = \''压缩文件时出现内部错误:\'';


DECOMPRESS_ERROR = \''解压文件时出现内部错误:\'';
COMPRESS_STRM_ERROR = \''压缩流时出现内部错误:\'';
DECOMPRESS_STRM_ERROR = \''解压流时出现内部错误:\'';
BufSize = $4096;

// 压缩文件
procedure CompressFile(Source, Target: String);
var
i: Integer;
Buf: array[0..BufSize] of byte;
ComStream: TCompressionStream;
InStream, OutStream: TFileStream;
begin
if not FileExists(Source) then
Exit;
InStream := Nil;
OutStream := nil;
ComStream := nil;
try
// 生成流
InStream := TFileStream.Create(Source, fmOpenRead OR fmShareDenyNone);
OutStream := TFileStream.Create(Target, fmCreate OR fmShareDenyWrite);
ComStream := TCompressionStream.Create(clMax, OutStream);

// 压缩流
for i := 1 to (InStream.Size div BufSize) do begin
InStream.ReadBuffer(Buf, BufSize);
ComStream.Write(Buf, BufSize);
end;

i := InStream.Size mod BufSize;
if (i > 0) then begin
InStream.ReadBuffer(Buf, i);
ComStream.Write(Buf, i);
End;

InStream.Free;
InStream := nil;

// 注先后
ComStream.Free;
ComStream := nil;

// 在此写加密流代码(要先释放 ComStream)
// EncryptStream(OutStream);

OutStream.Free;
OutStream := nil;
except
on E: Exception do begin
if (InStream <> nil) then
InStream.Free;
if (OutStream <> nil) then
OutStream.Free;
if (ComStream <> nil) then
ComStream.Free;
MessageDlg(COMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0);
end;
end;
end;

// 解压文件
procedure DecompressFile(Source, Target: String);
var
i: Integer;
Buf: array[0..BufSize] of Byte;
DecomStream: TDecompressionStream;
MemStream: TMemoryStream;
OutStream: TFileStream;
begin
if not FileExists(Source) then
Exit;

MemStream := Nil;
OutStream := nil;
DecomStream := nil;

try
// 生成流
// 先读文件到 MemStream 中解密(Source 只读).
// DecomStream 的开始位置 = MemStream.Position
MemStream := TMemoryStream.Create;
MemStream.LoadFromFile(Source);
// 在此写解密流代码
// DecryptStream(MemStream);

OutStream := TFileStream.Create(Target, fmCreate or fmShareDenyWrite);
DecomStream := TDeCompressionStream.Create(MemStream);

{ InStream := TFileStream.Create(Source, fmOpenRead or fmShareDenyNone);
OutStream := TFileStream.Create(Target, fmCreate or fmShareDenyWrite);
DecomStream := TDeCompressionStream.Create(InStream); }

// 解压流
repeat
i := DecomStream.Read(Buf, BufSize);
OutStream.WriteBuffer(Buf, i);
until (i = 0);

// 注意先后
OutStream.Free;
OutStream := nil;

DecomStream.Free;
DecomStream := nil;

MemStream.Free;
MemStream := Nil;
except
on E: Exception do begin
if (MemStream <> nil) then


MemStream.Free;
if (OutStream <> nil) then
OutStream.Free;
if (DecomStream <> nil) then
DecomStream.Free;
MessageDlg(DECOMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0);
end;
end;
end;

// 压缩文件到流
procedure CompressToStream(FileName: String; Stream: TStream);
var
i: Integer;
Buf: array[0..BufSize] of byte;
ComStream: TCompressionStream;
InStream: TFileStream;
begin
if not FileExists(FileName) then
Exit;
InStream := Nil;
ComStream := nil;
try
// 生成流
InStream := TFileStream.Create(FileName, fmOpenRead OR fmShareDenyNone);
ComStream := TCompressionStream.Create(clMax, Stream);

// 压缩流
for i := 1 to (InStream.Size div BufSize) do begin
InStream.ReadBuffer(Buf, BufSize);
ComStream.Write(Buf, BufSize);
end;

i := InStream.Size mod BufSize;
if (i > 0) then begin
InStream.ReadBuffer(Buf, i);

ComStream.Write(Buf, i);
End;

InStream.Free;
InStream := nil;

ComStream.Free;
ComStream := nil;

// 在此写加密流代码(要先释放 ComStream), Postion = 0
// EncryptStream(Stream);
except
on E: Exception do begin
if (InStream <> nil) then
InStream.Free;
if (ComStream <> nil) then
ComStream.Free;
MessageDlg(COMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0);
end;
end;
end;

// 解压文件到流
procedure DecompressToStream(FileName: String; Stream: TStream);
var
i: Integer;
Buf: array[0..BufSize] of Byte;
DecomStream: TDecompressionStream;
MemStream: TMemoryStream;
begin
if not FileExists(FileName) then
Exit;
MemStream := Nil;
DecomStream := nil;
try
// 生成流
// 先读文件到 MemStream 中解密(FileName 只读).
// DecomStream 的开始位置 = MemStream.Position
MemStream := TMemoryStream.Create;
MemStream.LoadFromFile(FileName);
// 在此写解密流代码
// DecryptStream(MemStream);

DecomStream := TDeCompressionStream.Create(MemStream);

// 解压流, Postion = 0
repeat
i := DecomStream.Read(Buf, BufSize);
Stream.WriteBuffer(Buf, i);
until (i = 0);
Stream.Position := 0;

DecomStream.Free;
DecomStream := nil;

MemStream.Free;
MemStream := Nil;
except
on E: Exception do begin
if (MemStream <> nil) then
MemStream.Free;
if (DecomStream <> nil) then
DecomStream.Free;
MessageDlg(DECOMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0);
end;
end;
end;

// 压缩流
procedure CompressStream(InStream, OutStream: TStream);
var
i: Integer;
Buf: array[0..BufSize] of byte;
ComStream: TCompressionStream;
begin
ComStream := Nil;
try
InStream.Position := 0;
ComStream := TCompressionStream.Create(clMax, OutStream);


for i := 1 to (InStream.Size div BufSize) do begin
InStream.ReadBuffer(Buf, BufSize);
ComStream.Write(Buf, BufSize);
end;

i := InStream.Size mod BufSize;
if (i > 0) then begin
InStream.ReadBuffer(Buf, i);
ComStream.Write(Buf, i);
End;

ComStream.Free;
ComStream := nil;

// 在此写加密流代码
// EncryptStream(OutStream);
except
on E: Exception do begin
if (ComStream <> nil) then
ComStream.Free;
MessageDlg(COMPRESS_STRM_ERROR + #10 + E.Message, mtError, [mbOk], 0);
end;
end;
end;

// 解压流
procedure DecompressStream(InStream, OutStream: TStream);
var
i: Integer;
Buf: array[0..BufSize] of Byte;
DecomStream: TDecompressionStream;
begin
DecomStream := nil;
try
// 在此写解密流代码
// DecryptStream(InStream);
DecomStream := TDeCompressionStream.Create(InStream);

repeat
i := DecomStream.Read(Buf, BufSize);
OutStream.WriteBuffer(Buf, i);
until (i = 0);
OutStream.Position := 0;

DecomStream.Free;
DecomStream := nil;
except
on E: Exception do begin
if (DecomStream <> nil) then
DecomStream.Free;
MessageDlg(DECOMPRESS_STRM_ERROR + #10 + E.Message, mtError, [mbOk], 0);
end;
end;
end;

end.

5楼: procedure TForm1.btReadClick(Sender: TObject);
var
sFileName : string;
mstream,mstreamout : TMemoryStream;
begin
if OpenDialog1.Execute then
begin
sFileName := OpenDialog1.FileName;
mstream := TMemoryStream.Create;
mstreamout := TMemoryStream.Create;
mstream.LoadFromFile(sFileName);
DecompressStream(mstream,mstreamout);
mstreamout.Seek(0,0);
Memo1.Lines.LoadFromStream(mstreamout);
mstream.free;
mstreamout.free;
end;
end;

procedure TForm1.btSaveClick(Sender: TObject);
var
sFileName : string;
mstream,mstreamout : TMemoryStream;
begin
if SaveDialog1.Execute then
begin
sFileName := SaveDialog1.FileName;
mstream := TMemoryStream.Create;
mstreamout := TMemoryStream.Create;
Memo1.Lines.SaveToStream(mstream);
CompressStream(mstream,mstreamout);
mstreamout.Seek(0,0);
mstreamout.SaveToFile(sFileName);
mstream.free;
mstreamout.free;
end;
end;

6楼: 学习!