????????最近进行开发时碰到压缩相关的使用,需要实现加密压缩一个文件夹,使用第三方工具WinRAR等进行解密解压,头一次用该功能,所以写篇博文简单记录一下开发过程。
目录
目录
一、zlib源码下载及库文件编译
1.库文件编译方法一:
2.库文件编译方法二
3.miniZip+zlib组合?
二、miniZip接口使用
三、加密压缩文件winrar解密夹源码
四、测试效果
五、工程下载
登录官方网址:下载最新源码版本Version1.2.13:

?解压下载的源码压缩包《zlib1213.zip》,使用VS2017编译库文件。
如下图,执行【文件】->【打开】->【CMake(M)】,打开解压后的文件“CMakeLists.txt。

? ?
?选择需要的编译模式,本例中选择了x86-Relese;执行【CMake】->【全部生成】。
?
生成成功后,库文件存储在缓存文件夹,选择【CMake】->【缓存(A)(仅x86-Relese)】->【打开缓存文件夹】->【zlib】,即可得到编译好的库文件,如下图所示,本例取动态库使用。
? ??
????????通过VS2017编译器打开https://blog.csdn.net/langhunxiaoyue/article/details/zlib-1.2.13/contrib/vstudio/vc14中自带的VS工程进行编译,也可以编译出zlib库文件,此方法不再详细介绍。
????????配置miniZip使用的文件,Zlib.lib/Zlib.dll是基础的库文件,其接口函数较为原始,我们取miniZip下的源winrar解密码和Zlib.dll配合使用【miniZip相当于在Zlib基础上封装了一层,使接口更加友好】,文件在压缩包中获取路径如下所示。
zlib头文件:
zlib-1.2.13zconf.h
zlib-1.2.13zlib.h
minizip源码:
zlib-1.2.13contribminizipioapi.c
zlib-1.2.13contribminizipioapi.h
zlib-1.2.13contribminizipcrypt.h
zlib-1.2.13contribminizipzip.c
zlib-1.2.13contribminizipzip.h
将zlib.lib、zlib.dll、zlib头文件、minizip源码放在一个文件夹下:

至此Zip压缩相关的库和代码便准备好了。
????????miniZip压缩相关的接口可在zip.h文件中查询,本例中,我们使用以下几个接口,也是压缩文件常用的接口。
例:将test.txt压缩为文件test.zip,流程如下:
1、调用zipOpen,新建并打开压缩文件test.zip。
2、调用zipOpenNewFileInZip3 ,向压缩文件中添加并打开文件test.txt。
3、调用zipWriteInFileInZip,将test.txt文件中的内容压缩到test.zip压缩包中的test.txt文件中。
4、调用zipCloseFileInZip?,关闭test.zip压缩包中的test.txt文件。
5、调用zipClose ,关闭压缩文件test.zip。
头文件调用:
文件CRC计算及压缩一个文件:
压缩整个文件夹:
压缩文件夹接口:
主函数
加密注意事项:进行加密压缩时,zipOpenNewFileInZip3 必须导入文件CRC的形参,如代码中所示。
????????使用VS2017,关联动态库zlib,编译上述代码,将编译通过的exe与zlib.dll放在同一文件夹下进行实验。

运行LoadUsing.exe,生成了压缩文件test.zip。

将原文件夹重命名test-old, 使用第三方工具“WinRAR”解压test.zip,输入密码“300”,解压成功。
将解压成功后的文件夹与原文件夹test-old进行比对,比对结果完全相同。如下图所示;
? ? ? ?

????????之前在很多帖子看到zlib加密压缩的文件,使用WinRAR等第三方工具无法解密,但我尝试的结果是都可以解密。
一定注意!!加密压缩时zipOpenNewFileInZip3 必须导入文件CRC的形参!!!
从博文头部,下载测试工程,使用VS2019打开编译测试。
该章节为新增加,文中是使用VS2017编译,工程包升级至VS2019编译。