» 游客:  注册 | 登录 | 社区设施 | 统计 | 帮助 | 猫游记  


 
标题: 文件/流的加密解密方法(For Delphi 6-7)
wonder
实习记者
Rank: 5Rank: 5


活动特别奖  
UID 27
精华 1
积分 182
帖子 330
威望 182
斑马币 3669 个
魅力 0
推广 0
阅读权限 20
注册 2006-8-30
状态 离线
发表于 2006-7-24 14:15  资料 文集 短消息 
文件/流的加密解密方法(For Delphi 6-7)

(*转自:斑马网 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.




wonder转贴,必属精贴!!!



顶部
[广告]
hongxi2006
小试牛刀
Rank: 2



UID 1518
精华 0
积分 7
帖子 108
威望 7
斑马币 376 个
魅力 0
推广 0
阅读权限 10
注册 2006-8-8
状态 离线
发表于 2006-8-4 06:28  资料 文集 短消息 
谢谢,受用




鸿禧台商网--引领商务生活
http://www.hongxi.com/


顶部
[广告]
 




当前时区 GMT+8, 现在时间是 2008-7-25 01:25

    Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 16.278681 second(s), 8 queries

清除 Cookies - 联系我们 - 斑马网(中国软件社区) - Archiver - WAP