(*
转自:斑马网 www.banma.com
* 单元说明: 文件/流的加密解密方法(For Delphi 6-7)
转自:斑马网 www.banma.com
*
转自:斑马网 www.banma.com
* 软件来源:
http://www.go-neumann.com转自:斑马网 www.banma.com
*
http://www.inbytes.net转自:斑马网 www.banma.com
*
转自:斑马网 www.banma.com
* 作 者:
neumann@163.com转自:斑马网 www.banma.com
*
转自:斑马网 www.banma.com
* 使用说明: 此文件的代码可以直接编译使用,
转自:斑马网 www.banma.com
* 您可以根据需要编写自己的加密/解密代码.
转自:斑马网 www.banma.com
*
转自:斑马网 www.banma.com
* 声 明: 以下代码属作者原创, 请转载时保留本信息.
转自:斑马网 www.banma.com
*
转自:斑马网 www.banma.com
*)
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
unit uCompress;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
interface
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
uses
转自:斑马网 www.banma.com
Windows, Messages, SysUtils, Variants, Classes, ComCtrls, Dialogs;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 压缩/解压文件
转自:斑马网 www.banma.com
procedure CompressFile(Source, Target: String); stdcall;
转自:斑马网 www.banma.com
procedure DecompressFile(Source, Target: String); stdcall;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 压缩/解压文件到流
转自:斑马网 www.banma.com
procedure CompressToStream(FileName: String; Stream: TStream); stdcall;
转自:斑马网 www.banma.com
procedure DecompressToStream(FileName: String; Stream: TStream); stdcall;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 压缩/解压流
转自:斑马网 www.banma.com
procedure CompressStream(InStream, OutStream: TStream); stdcall;
转自:斑马网 www.banma.com
procedure DecompressStream(InStream, OutStream: TStream); stdcall;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
implementation
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
uses
转自:斑马网 www.banma.com
ZLib;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
const
转自:斑马网 www.banma.com
COMPRESS_ERROR = '压缩文件时出现内部错误:';
转自:斑马网 www.banma.com
DECOMPRESS_ERROR = '解压文件时出现内部错误:';
转自:斑马网 www.banma.com
COMPRESS_STRM_ERROR = '压缩流时出现内部错误:';
转自:斑马网 www.banma.com
DECOMPRESS_STRM_ERROR = '解压流时出现内部错误:';
转自:斑马网 www.banma.com
BufSize = $4096;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 压缩文件
转自:斑马网 www.banma.com
procedure CompressFile(Source, Target: String);
转自:斑马网 www.banma.com
var
转自:斑马网 www.banma.com
i: Integer;
转自:斑马网 www.banma.com
Buf: array[0..BufSize] of byte;
转自:斑马网 www.banma.com
ComStream: TCompressionStream;
转自:斑马网 www.banma.com
InStream, OutStream: TFileStream;
转自:斑马网 www.banma.com
begin
转自:斑马网 www.banma.com
if not FileExists(Source) then
转自:斑马网 www.banma.com
Exit;
转自:斑马网 www.banma.com
InStream := Nil;
转自:斑马网 www.banma.com
OutStream := nil;
转自:斑马网 www.banma.com
ComStream := nil;
转自:斑马网 www.banma.com
try
转自:斑马网 www.banma.com
// 生成流
转自:斑马网 www.banma.com
InStream := TFileStream.Create(Source, fmOpenRead OR fmShareDenyNone);
转自:斑马网 www.banma.com
OutStream := TFileStream.Create(Target, fmCreate OR fmShareDenyWrite);
转自:斑马网 www.banma.com
ComStream := TCompressionStream.Create(clMax, OutStream);
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 压缩流
转自:斑马网 www.banma.com
for i := 1 to (InStream.Size div BufSize) do begin
转自:斑马网 www.banma.com
InStream.ReadBuffer(Buf, BufSize);
转自:斑马网 www.banma.com
ComStream.Write(Buf, BufSize);
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
i := InStream.Size mod BufSize;
转自:斑马网 www.banma.com
if (i > 0) then begin
转自:斑马网 www.banma.com
InStream.ReadBuffer(Buf, i);
转自:斑马网 www.banma.com
ComStream.Write(Buf, i);
转自:斑马网 www.banma.com
End;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
InStream.Free;
转自:斑马网 www.banma.com
InStream := nil;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 注先后
转自:斑马网 www.banma.com
ComStream.Free;
转自:斑马网 www.banma.com
ComStream := nil;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 在此写加密流代码(要先释放 ComStream)
转自:斑马网 www.banma.com
// EncryptStream(OutStream);
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
OutStream.Free;
转自:斑马网 www.banma.com
OutStream := nil;
转自:斑马网 www.banma.com
except
转自:斑马网 www.banma.com
on E: Exception do begin
转自:斑马网 www.banma.com
if (InStream <> nil) then
转自:斑马网 www.banma.com
InStream.Free;
转自:斑马网 www.banma.com
if (OutStream <> nil) then
转自:斑马网 www.banma.com
OutStream.Free;
转自:斑马网 www.banma.com
if (ComStream <> nil) then
转自:斑马网 www.banma.com
ComStream.Free;
转自:斑马网 www.banma.com
MessageDlg(COMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0);
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 解压文件
转自:斑马网 www.banma.com
procedure DecompressFile(Source, Target: String);
转自:斑马网 www.banma.com
var
转自:斑马网 www.banma.com
i: Integer;
转自:斑马网 www.banma.com
Buf: array[0..BufSize] of Byte;
转自:斑马网 www.banma.com
DecomStream: TDecompressionStream;
转自:斑马网 www.banma.com
MemStream: TMemoryStream;
转自:斑马网 www.banma.com
OutStream: TFileStream;
转自:斑马网 www.banma.com
begin
转自:斑马网 www.banma.com
if not FileExists(Source) then
转自:斑马网 www.banma.com
Exit;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
MemStream := Nil;
转自:斑马网 www.banma.com
OutStream := nil;
转自:斑马网 www.banma.com
DecomStream := nil;
转自:斑马网 www.banma.com
try
转自:斑马网 www.banma.com
// 生成流
转自:斑马网 www.banma.com
// 先读文件到 MemStream 中解密(Source 只读).
转自:斑马网 www.banma.com
// DecomStream 的开始位置 = MemStream.Position
转自:斑马网 www.banma.com
MemStream := TMemoryStream.Create;
转自:斑马网 www.banma.com
MemStream.LoadFromFile(Source);
转自:斑马网 www.banma.com
// 在此写解密流代码
转自:斑马网 www.banma.com
// DecryptStream(MemStream);
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
OutStream := TFileStream.Create(Target, fmCreate or fmShareDenyWrite);
转自:斑马网 www.banma.com
DecomStream := TDeCompressionStream.Create(MemStream);
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
{ InStream := TFileStream.Create(Source, fmOpenRead or fmShareDenyNone);
转自:斑马网 www.banma.com
OutStream := TFileStream.Create(Target, fmCreate or fmShareDenyWrite);
转自:斑马网 www.banma.com
DecomStream := TDeCompressionStream.Create(InStream); }
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 解压流
转自:斑马网 www.banma.com
repeat
转自:斑马网 www.banma.com
i := DecomStream.Read(Buf, BufSize);
转自:斑马网 www.banma.com
OutStream.WriteBuffer(Buf, i);
转自:斑马网 www.banma.com
until (i = 0);
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 注意先后
转自:斑马网 www.banma.com
OutStream.Free;
转自:斑马网 www.banma.com
OutStream := nil;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
DecomStream.Free;
转自:斑马网 www.banma.com
DecomStream := nil;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
MemStream.Free;
转自:斑马网 www.banma.com
MemStream := Nil;
转自:斑马网 www.banma.com
except
转自:斑马网 www.banma.com
on E: Exception do begin
转自:斑马网 www.banma.com
if (MemStream <> nil) then
转自:斑马网 www.banma.com
MemStream.Free;
转自:斑马网 www.banma.com
if (OutStream <> nil) then
转自:斑马网 www.banma.com
OutStream.Free;
转自:斑马网 www.banma.com
if (DecomStream <> nil) then
转自:斑马网 www.banma.com
DecomStream.Free;
转自:斑马网 www.banma.com
MessageDlg(DECOMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0);
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 压缩文件到流
转自:斑马网 www.banma.com
procedure CompressToStream(FileName: String; Stream: TStream);
转自:斑马网 www.banma.com
var
转自:斑马网 www.banma.com
i: Integer;
转自:斑马网 www.banma.com
Buf: array[0..BufSize] of byte;
转自:斑马网 www.banma.com
ComStream: TCompressionStream;
转自:斑马网 www.banma.com
InStream: TFileStream;
转自:斑马网 www.banma.com
begin
转自:斑马网 www.banma.com
if not FileExists(FileName) then
转自:斑马网 www.banma.com
Exit;
转自:斑马网 www.banma.com
InStream := Nil;
转自:斑马网 www.banma.com
ComStream := nil;
转自:斑马网 www.banma.com
try
转自:斑马网 www.banma.com
// 生成流
转自:斑马网 www.banma.com
InStream := TFileStream.Create(FileName, fmOpenRead OR fmShareDenyNone);
转自:斑马网 www.banma.com
ComStream := TCompressionStream.Create(clMax, Stream);
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 压缩流
转自:斑马网 www.banma.com
for i := 1 to (InStream.Size div BufSize) do begin
转自:斑马网 www.banma.com
InStream.ReadBuffer(Buf, BufSize);
转自:斑马网 www.banma.com
ComStream.Write(Buf, BufSize);
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
i := InStream.Size mod BufSize;
转自:斑马网 www.banma.com
if (i > 0) then begin
转自:斑马网 www.banma.com
InStream.ReadBuffer(Buf, i);
转自:斑马网 www.banma.com
ComStream.Write(Buf, i);
转自:斑马网 www.banma.com
End;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
InStream.Free;
转自:斑马网 www.banma.com
InStream := nil;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
ComStream.Free;
转自:斑马网 www.banma.com
ComStream := nil;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 在此写加密流代码(要先释放 ComStream), Postion = 0
转自:斑马网 www.banma.com
// EncryptStream(Stream);
转自:斑马网 www.banma.com
except
转自:斑马网 www.banma.com
on E: Exception do begin
转自:斑马网 www.banma.com
if (InStream <> nil) then
转自:斑马网 www.banma.com
InStream.Free;
转自:斑马网 www.banma.com
if (ComStream <> nil) then
转自:斑马网 www.banma.com
ComStream.Free;
转自:斑马网 www.banma.com
MessageDlg(COMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0);
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 解压文件到流
转自:斑马网 www.banma.com
procedure DecompressToStream(FileName: String; Stream: TStream);
转自:斑马网 www.banma.com
var
转自:斑马网 www.banma.com
i: Integer;
转自:斑马网 www.banma.com
Buf: array[0..BufSize] of Byte;
转自:斑马网 www.banma.com
DecomStream: TDecompressionStream;
转自:斑马网 www.banma.com
MemStream: TMemoryStream;
转自:斑马网 www.banma.com
begin
转自:斑马网 www.banma.com
if not FileExists(FileName) then
转自:斑马网 www.banma.com
Exit;
转自:斑马网 www.banma.com
MemStream := Nil;
转自:斑马网 www.banma.com
DecomStream := nil;
转自:斑马网 www.banma.com
try
转自:斑马网 www.banma.com
// 生成流
转自:斑马网 www.banma.com
// 先读文件到 MemStream 中解密(FileName 只读).
转自:斑马网 www.banma.com
// DecomStream 的开始位置 = MemStream.Position
转自:斑马网 www.banma.com
MemStream := TMemoryStream.Create;
转自:斑马网 www.banma.com
MemStream.LoadFromFile(FileName);
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 在此写解密流代码
转自:斑马网 www.banma.com
// DecryptStream(MemStream);
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
DecomStream := TDeCompressionStream.Create(MemStream);
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 解压流, Postion = 0
转自:斑马网 www.banma.com
repeat
转自:斑马网 www.banma.com
i := DecomStream.Read(Buf, BufSize);
转自:斑马网 www.banma.com
Stream.WriteBuffer(Buf, i);
转自:斑马网 www.banma.com
until (i = 0);
转自:斑马网 www.banma.com
Stream.Position := 0;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
DecomStream.Free;
转自:斑马网 www.banma.com
DecomStream := nil;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
MemStream.Free;
转自:斑马网 www.banma.com
MemStream := Nil;
转自:斑马网 www.banma.com
except
转自:斑马网 www.banma.com
on E: Exception do begin
转自:斑马网 www.banma.com
if (MemStream <> nil) then
转自:斑马网 www.banma.com
MemStream.Free;
转自:斑马网 www.banma.com
if (DecomStream <> nil) then
转自:斑马网 www.banma.com
DecomStream.Free;
转自:斑马网 www.banma.com
MessageDlg(DECOMPRESS_ERROR + #10 + E.Message, mtError, [mbOk], 0);
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 压缩流
转自:斑马网 www.banma.com
procedure CompressStream(InStream, OutStream: TStream);
转自:斑马网 www.banma.com
var
转自:斑马网 www.banma.com
i: Integer;
转自:斑马网 www.banma.com
Buf: array[0..BufSize] of byte;
转自:斑马网 www.banma.com
ComStream: TCompressionStream;
转自:斑马网 www.banma.com
begin
转自:斑马网 www.banma.com
ComStream := Nil;
转自:斑马网 www.banma.com
try
转自:斑马网 www.banma.com
InStream.Position := 0;
转自:斑马网 www.banma.com
ComStream := TCompressionStream.Create(clMax, OutStream);
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
for i := 1 to (InStream.Size div BufSize) do begin
转自:斑马网 www.banma.com
InStream.ReadBuffer(Buf, BufSize);
转自:斑马网 www.banma.com
ComStream.Write(Buf, BufSize);
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
i := InStream.Size mod BufSize;
转自:斑马网 www.banma.com
if (i > 0) then begin
转自:斑马网 www.banma.com
InStream.ReadBuffer(Buf, i);
转自:斑马网 www.banma.com
ComStream.Write(Buf, i);
转自:斑马网 www.banma.com
End;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
ComStream.Free;
转自:斑马网 www.banma.com
ComStream := nil;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 在此写加密流代码
转自:斑马网 www.banma.com
// EncryptStream(OutStream);
转自:斑马网 www.banma.com
except
转自:斑马网 www.banma.com
on E: Exception do begin
转自:斑马网 www.banma.com
if (ComStream <> nil) then
转自:斑马网 www.banma.com
ComStream.Free;
转自:斑马网 www.banma.com
MessageDlg(COMPRESS_STRM_ERROR + #10 + E.Message, mtError, [mbOk], 0);
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
// 解压流
转自:斑马网 www.banma.com
procedure DecompressStream(InStream, OutStream: TStream);
转自:斑马网 www.banma.com
var
转自:斑马网 www.banma.com
i: Integer;
转自:斑马网 www.banma.com
Buf: array[0..BufSize] of Byte;
转自:斑马网 www.banma.com
DecomStream: TDecompressionStream;
转自:斑马网 www.banma.com
begin
转自:斑马网 www.banma.com
DecomStream := nil;
转自:斑马网 www.banma.com
try
转自:斑马网 www.banma.com
// 在此写解密流代码
转自:斑马网 www.banma.com
// DecryptStream(InStream);
转自:斑马网 www.banma.com
DecomStream := TDeCompressionStream.Create(InStream);
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
repeat
转自:斑马网 www.banma.com
i := DecomStream.Read(Buf, BufSize);
转自:斑马网 www.banma.com
OutStream.WriteBuffer(Buf, i);
转自:斑马网 www.banma.com
until (i = 0);
转自:斑马网 www.banma.com
OutStream.Position := 0;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
DecomStream.Free;
转自:斑马网 www.banma.com
DecomStream := nil;
转自:斑马网 www.banma.com
except
转自:斑马网 www.banma.com
on E: Exception do begin
转自:斑马网 www.banma.com
if (DecomStream <> nil) then
转自:斑马网 www.banma.com
DecomStream.Free;
转自:斑马网 www.banma.com
MessageDlg(DECOMPRESS_STRM_ERROR + #10 + E.Message, mtError, [mbOk], 0);
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
end;
转自:斑马网 www.banma.com
转自:斑马网 www.banma.com
end.