引言: 用DELPHI实现文件加密压缩作者:e梦缘(wnhoo)Mail:wnhoo@163.com风花雪月e梦情缘 点击下载此详细说明文件概述:在这篇文件中,讲述对单个文件的数据加密、数据压缩、自解压的实现。
摘要:
简单介绍一下vcl消息传递
vcl除了封装了windows消息外,还有自己自定义的一些消息。windows的消息以wm_ 开头,可以参考delphi help里带的windows sdk 或msdn, 在messages.pas文件中也可以看得到. vcl的一些内部消息,一般是以cm_ cn_ cb_ 等开头的,在controls.pas文件中也可以看得到,具体的使用可以查看delphi......
摘要:网络id:wnhoo or sos_admin网名:e梦缘mail:wnhoo@163.com风花雪月 e梦情缘
http://delphi.ur-solution.com/delphi_download/upload/33954_wnhoo.rar
[dpr部分]program project1;uses forms, unit1 in unit1.pas {form1} ,windows,......
用DELPHI实现文件加密压缩
用delphi实现文件加密压缩 【程序编程相关:
使用语句事件监视器调优 DB2 通用数据】 【推荐阅读:
利用 MSCS 创建高可用性的 DB2 】作者: e梦缘 (wnhoo) 【扩展信息:
DB2 通用数据库中的事务性日志记录概述】 mail:wnhoo@163.com 风花雪月 e梦情缘 点击下载此详细说明文件 概述: 在这篇文件中,讲述对单个文件的数据加密.数据压缩.自解压的实现.同样,也可以实现对多个文件或文件夹的压缩,只要稍加修改便可实现. 关键字:加密压缩.zlib.流.资源文件 引 言: 在日常中,我们一定使用过winzip.winrar这样的出名的压缩软件,就是我们开发软件过程中不免要遇到数据加密.数据压缩的问题!本文中就这一技术问题展开探讨,同时感谢各位网友的技巧,在我每次面对问题要解决的时候,是你们辛苦地摸索出来的技巧总是让我豁然开朗,问题迎刃而解.本篇文章主要是运用delph的强大的流处理方面的技巧来实现的数据加密压缩,并用于实际的软件程序开发中,将我个人的心得.开发经验写出来与大家分享. 1. 系统功能 1).数据压缩 使用delphi提供的两个流类(tcompressionstream与tdecompressionstream)来完成数据的压缩与解压缩. 2).数据加密压缩 通过delphi编程中“流”的应用实现数据加密,主要采用tstream的两个派生类tfilestream.tmemorystream 来完成的;其中数据压缩部分采用1)的实现方法 3).双击压缩文件自动关联解压 通过更改注册表的实现扩展名与程序文件的关联,主要采用tregistry;并且,api函数shchangenotify实现注册效果的立即呈现. 4).可生成自解压文件 自解压的文件实现数据压缩1)与数据加密压缩2)的自动解压;并且,通过资源文件的使用实现可执行的自解压文件与数据文件的合并,来完成数据的自解压实现. 2. 系统实现 2.1.工作原理 2.2.关键技术的讲述 (一)zlib 1).基类 tcustomzlibstream:是类tcompressionstream与tdecompressionstream 类的基类,它主要有一个属性: onprogress,在类进行压缩或解压缩的过程中会发生这个的事件 . 格式:procedure onprogress (sender: tobject); dynamic; 2).压缩类tcompressionstream:除了继承了基类的onprogress 属性外,又增加了一个属性:compressionrate,它的定义如下: property compressionrate: single read getcompressionrate; 通过这个属性,可以得到压缩比. 它的几个重要的方法定义如下: constructor tcompressionstream.create (compressionlevel: tcompressionlevel; dest: tstream); 其中:tcompressionlevel(压缩类型),它由如下几个定义: 1). clnone :不进行数据压缩; 2). clfastest:进行快速压缩,牺牲压缩效率; 3). cldefault:进行正常压缩; 4). clmax: 进行最大化压缩,牺牲速度; dest:目的流,用于存放压缩过的数据. function tcompressionstream.write (const buffer; count: longint): longint; 其中:buffer:需要压缩的数据; count: 需要压缩的数据的字节数; 函数返回写入流的字节数. 注意:压缩类tcompressionstream的数据只能是写入的,如果试图从其内部读取数据,将发生一个"error "异常.需要压缩的数据通过方法 write写入流中,在写入的过程中就被压缩,并保存在由构造函数提供的内存流(tmemorystream)中,同时触发 onprocess 事件. 3). 解压缩类 tdecompressionstream :与压缩类tcompressionstream相反,它的数据是只能读出的,如果试图往其内部写数据,将发生一个"error "异常. 它的几个重要方法定义如下: 构造函数:constructor create(source: tstream); 其中:source 是保存着压缩数据的流; function read(var buffer; count: longint): longint; 数据读出函数,buffer: 存数据缓冲区;count: 缓冲区的大小; 函数返回读出的字节数.数据在读出的过程中,数据被解压缩,并触发 onprocess 事件. (二)流 在delphi中,所有流对象的基类为tstream类,其中定义了所有流的共同属性与方法. tstream类中定义的属性如下: 1).size:此属性以字节返回流中数据大小. 2).position:此属性控制流中存取指针的位置. tstream中定义的虚方法有四个: 1).read:此方法实现将数据从流中读出,返回值为实际读出的字节数,它可以小于或等于指定的值. 2).write:此方法实现将数据写入流中,返回值为实际写入流中的字节数. 3).seek:此方法实现流中读取指针的移动,返回值为移动后指针的位置. 函数原形为:function seek(offset:longint;origint:word):longint;virtual;abstract; ...
下一页 摘要:假设有一组数字 1~1000,请将它们随机填充在一个数组中要求:1、数组中无重复数字2、整个程式运算很快!
william 兄解答var
nums: array[1..1000] of integer;
i,j,k,temp: integer;
begin
for i := low(nums) to high(nums) do
nums[i] := i;
for i := ......