用DELPHI实现文件加密压缩(3)
2008-04-11 12:26:57来源:互联网 阅读 ()
reg.RootKey := HKEY_CLASSES_ROOT;
reg.OpenKey(''''.zzz'''', true);
reg.WriteString('''''''', ''''myzip'''');
reg.CloseKey;
reg.OpenKey(''''myzip\shell\open\command'''', true);
//用于打开.zzz文件的可执行程序
reg.WriteString('''''''', ''''"'''' application.ExeName ''''" "%1"'''');
reg.CloseKey;
reg.OpenKey(''''myzip\DefaultIcon'''',true);
//取当前可执行程序的图标为.zzz文件的图标
reg.WriteString('''''''','''''''' application.ExeName '''',0'''');
reg.Free;
//立即刷新
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
2.3、加密压缩的实现
1、 生成INI临时加密文件
用于加密的INI的临时文件格式:
[FILE1]//节点,在软件中使用FILE1..N可以实现多文件加密
FILENAME=压缩文件名
PASSWORD=解压密码
FILESIZE=文件大小
FILEDATE=创建日期
ISJM=解压是否需要密码
如果是实现多文件、文件夹的信息存储,可以将密码关键字存在一个总的节点下。本文中仅是实现对单个文件的加密,所以只要上述格式就可以了。
2、 将数据文件与用于加密的INI文件的合并,这可以采用文件流的形式实现。
加密后文件结构图:
图(1)
图(2)
上面两种形式,可以根据实际采用。本文采用图(1)的结构。
3、 对于加密后的数据,采用ZLIB技术实现压缩存储,生成新压缩形式的文件。
2.4、文件关联的实现 见2.2 (五)
2.5、自解压的实现
1. 建立一个专门用来自解压的可执行程序文件
2. 将1中建立的文件,生成资源文件
3. 将资源文件放到本文中这个压缩工具的程序中一起编译。
4. 通过将资源文件与压缩文件的合并,生成自解压文件。
自解压文件结构图:
5.自解压实现:通过将自身文件中的加密压缩数据的分解,然后对分解的加密压缩数据再一次解压并分解出真正的数据文件。
2.6 系统程序设计
这是关于这个软件实现的核心部分全部代码,在这里详细讲述这个软件所有的技术细节。
// wnhoo_zzz.pas
unit wnhoo_zzz;
interface
uses
Windows,Forms,SysUtils,Classes,zlib,Registry,INIFILES, Dialogs, shlobj;
type
pass=string[20];
type
Tmyzip = class
private
{ private declarations here}
protected
{ protected declarations here }
public
procedure regzzz;
procedure ys_file(infileName, outfileName: string;password:pass;isjm:boolean;ysbz:integer);
function jy_file(infileName: string;password:pass=''''''''):boolean;
procedure zjywj(var filename:string);
constructor Create;
destructor Destroy; override;
{ public declarations here }
published
{ published declarations here }
end;
implementation
constructor Tmyzip.Create;
begin
inherited Create; // 初始化继承下来的部分
end;
//#####################################################
//原文件加密
procedure jm_File(vfile:string;var Target:TMemoryStream;password:pass;isjm:boolean);
{
vfile:加密文件
target:加密后输出目标流 》》》
password:密码
isjm:是否加密
-------------------------------------------------------------
加密后文件SIZE=原文件SIZE+[INI加密压缩信息文件]的SIZE+存储[INI加密压缩信息文件]的大小数据类型的SIZE
---------------------------------------------------------------
}
var
tmpstream,inistream:TFileStream;
FileSize:integer;
inifile:TINIFILE;
filename:string;
begin
//打开需要 [加密压缩文件]
tmpstream:=TFileStream.Create(vFile,fmOpenread or fmShareExclusive);
try
//向 [临时加密压缩文件流] 尾部写入 [原文件流]
Target.Seek(0,soFromEnd);
Target.CopyFrom(tmpstream,0);
//取得文件路径 ,生成 [INI加密压缩信息文件]
filename:=ExtractFilePath(paramstr(0)) ''''tmp.in_'''';
inifile:=TInifile.Create(filename);
inifile.WriteString(''''file1'''',''''filename'''',ExtractFileName(vFile));
inifile.WriteString(''''file1'''',''''password'''',password);
inifile.WriteInteger(''''file1'''',''''filesize'''',Target.Size);
inifile.WriteDateTime(''''file1'''',''''fileDate'''',now());
inifile.WriteBool(''''file1'''',''''isjm'''',isjm);
inifile.Free ;
//读入 [INI加密压缩信息文件流]
inistream:=TFileStream.Create(filename,fmOpenread or fmShareExclusive);
try
//继续在 [临时加密压缩文件流] 尾部加入 [INI加密压缩信息文件]
inistream.Position :=0;
Target.Seek(0,sofromend);
Target.CopyFrom(inistream,0);
//计算当前 [INI加密压缩信息文件] 的大小
FileSize:=inistream.Size ;
//继续在 [临时加密文件尾部] 加入 [INI加密压缩信息文件] 的SIZE信息
Target.WriteBuffer(FileSize,sizeof(FileSize));
finally
inistream.Free ;
deletefile(filename);
end;
finally
tmpstream.Free;
end;
end;
//**************************************************************
//流压缩
procedure ys_stream(instream, outStream: TStream;ysbz:integer);
{
instream: 待压缩的已加密文件流
outStream 压缩后输出文件流
ysbz:压缩标准
}
var
ys: TCompressionStream;
begin
//流指针指向头部
inStream.Position := 0;
//压缩标准的选择
case ysbz of
1: ys := TCompressionStream.Create(clnone,OutStream);//不压缩
2: ys := TCompressionStream.Create(clFastest,OutStream);//快速压缩
3: ys := TCompressionStream.Create(cldefault,OutStream);//标准压缩
4: ys := TCompressionStream.Create(clmax,OutStream); //最大压缩
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
