一种基于Zlib库和AES算法的ZIP包解压方法技术

技术编号:15624120 阅读:122 留言:0更新日期:2017-06-14 05:50
本发明专利技术涉及一种基于Zlib库和AES算法的ZIP包解压方法。该方法包括:1)获取网站的ZIP包数据,从ZIP包中读取文件并判断其是否采用AES算法进行加密;2)对于采用AES算法进行加密的ZIP包数据,在Zlib库基础上添加AES算法来对ZIP包进行解密和解压。进一步地,步骤2)将AES算法封装在libaes.a静态库文件中,将Zlib库封装在libz.so动态库文件中。本发明专利技术中,对开源压缩Zlib项目进行改进和优化,加入AES解密算法,使得YCL对于网站运营商上报的数据可以准确并快速处理,具有比7‑zip算法效率高、占有CPU少的优点。

【技术实现步骤摘要】
一种基于Zlib库和AES算法的ZIP包解压方法
本专利技术涉及计算机信息安全
,是一种基于Zlib开源压缩和解压缩项目,对其进行优化,加入AES解密算法。由应用程序调用Zlib的动态链接库来对AES加密的ZIP包进行解密解压的方法。
技术介绍
科技的发展使计算机深入到我们生活的方方面面,而压缩作为一种非常典型的技术,应用到很多场合,比如文件系统,数据库,消息传输等各类场合。压缩可以分为无损压缩和有损压缩;有损,指的是在压缩之后无法完整地还原原始信息,但压缩率高;无损压缩则用于文件等必须完整还原信息的场合,本文提到的ZIP文件就是一种无损压缩。在实际应用中,经常需要实现对各个网站的上网数据进行读取和分析,提取出感兴趣的信息。但各个网站的上网数据文件内容非常庞大,需要对数据进行压缩;为了防止信息泄露,还对数据进行了加密处理。AES(TheAdvancedEncrypionStandard)是美国国家标准与技术研究所用于加密电子数据的规范。它被广泛应用到金融、电信和政府数字信息等领域。AES是一个迭代的,对称密钥分组的密码,它可以使用128,192,256位密钥,并且用128位(16字节)分组加密和解密数据。Zlib是一个免费、通用、不受任何法律阻碍的、无损的数据压缩开发库,而且还是跨平台的开源项目。这意味着任何人都可以修改、使用而无需交纳任何费用,这也是对各个网站的上网数据进行读取和分析时,通常使用Zlib库进行开发的主要原因,并且ZIP格式属于几种主流的压缩格式之一。在使用Zlib库对各个网站的上网数据进行读取和分析时,通常采用Linux自带的Zlib库函数对数据进行压缩和解压,一些网站上报的数据采用7-zip软件加密压缩成ZIP包,而7-zip软件采用AES算法对数据进行加密。但Zlib只支持简单的加密算法,并不支持AES加密解密算法;所以随之带来的问题是Zlib库不能正常处理网站上报的采用AES加密的数据。
技术实现思路
本专利技术的目的是提供一种基于Zlib开源库,结合AES解密算法,能自动且准确地对7-zip软件加密压缩的文件进行解密解压,通过仅添加libz.so动态链接库和libaes.a静态链接库即可处理网站上报加密的ZIP包。本专利技术采用的技术方案如下:一种基于Zlib库和AES算法解压ZIP包的方法,包括以下步骤:1)获取网站的ZIP包数据,从ZIP包中读取文件并判断其是否采用AES算法进行加密;2)对于采用AES算法进行加密的ZIP包数据,在Zlib库基础上添加AES算法来对ZIP包进行解密和解压。进一步地,步骤2)将AES算法封装在静态库文件中,将Zlib库封装在libz.so动态库文件中。进一步地,所述AES加密解密算法包括:a.AES加密过程:SubBytes(字节替代),ShiftRows(行移位),MixColumns(列混淆),AddRoundKey(轮密钥加);b.AES解密过程:InvSubBytes(逆字节替代),InvShiftRows(逆行移位),InvMixColumns(逆列混淆)AddRoundKey(轮密钥加)。本专利技术的优点和积极效果如下:由于本专利技术中,对开源压缩Zlib项目进行改进和优化,加入AES解密算法;这正是7-zip的加密算法,从而对于网站运营商上报的数据可以准确并快速处理。另外,Zlib解压算法采用libz.so动态库的方式,而AES算法采用封装成静态库方式,在处理网站上报的数据时可以自动安装,不需要升级系统的Zlib库,这样避免了操作系统版本过低带来另外问题;最后本专利技术采用的Zlib解压算法具有比7-zip算法效率高、占有CPU少的优点。附图说明图1是处理网站上报数据的流程图;图2是调用Zlib解压ZIP文件流程图;图3是AES加密解密流程图;图4是SubBytes(字节替代)矩阵示意图;图5是ShiftRows(行移位)示意图;图6是7zip和Zlib解压时间对比图。具体实施方式下面通过具体实施例和附图,对本专利技术做进一步说明。图1是展示了现有技术中处理网站上报数据的整个流程。如该图所示,首先从现场的搬运程序接收到ZIP包数据,扫描相应的目录,然后解压ZIP包文件,再扫描解压ZIP包文件后的bcp文件和实体文件,最后对bcp文件进行格式转换,即取得无效数据和对有效的数据进行校验,再从这些有效的数据中提取特定的信息;实体文件入全文数据库。本文专利技术是在原有Zlib库基础上,添加AES算法来解压ZIP包的方法,位于图1的第三个环节。一.解压模块设计尽管7zip的压缩率很高,且支持AES加密和解密,但7zip占用cpu很高,这会很大程度上影响其在处理网站上报数据时的实时性,所以本方法中采用Zlib库来解压ZIP文件。Zlib库属于开源库,采用DEFLATE压缩算法,只支持简单加密解密功能;但不支持AES加解密算法,所以要想解压AES算法加密的ZIP包,就必须修改开源库Zlib代码添加AES加解密算法。为了不影响之前调用的接口,把AES算法封装在libaes.a静态库文件中(libaes.a为本专利技术自己定义的静态库名称);Zlib库封装在libz.so动态库文件中。这么做的好处是无论怎么修改代码,只需更新这两个库文件不必修改其他的程序。修改unzip.c文件,增加修改unzOpenCurrentFilePassword函数,此函数主要功能获得ZIP文件信息;判断HEADID若是0x9901则ZIP包采用AES加密;读取版本号;读取两字节判断是否为‘A’和‘E’;读取ZIP包加密模式,这里应该是AES;读取ZIP包压缩模式。修改unzReadCurrentFile函数,此函数主要功能读取ZIP包中的文件内容,判断之前读取的ZIP加密模式;若是AES则调用libaes.a静态库进行解密,用已知的密钥进行解密得到明文。解压流程:如图2所示,包括:打开ZIP流,获取ZIP文件的信息,打开当前定位的文件,循环读取文件(若是AES加密则对读取数据进行AES解密),关闭当前文件,关闭ZIP流。具体步骤如下:1.以文件流的方式打开ZIP包;2.定位到压缩文件中的第一个文件;3.获得ZIP相关的文件信息,若是目录则继续递归,若是文件则创建文件;4.打开当前定位到文件,获取ZIP信息,判断是否是AES加密,若是则初始化AES信息结构体,本专利技术将该结构体称为aes_cox;5.从当前ZIP包中读取文件,循环读取,判断是否是AES加密,若是将内容解密读出,并将读到的内容写入到之前创建的文件中;6.设置文件时间戳;7.关闭当前读取的文件,释放之前动态分配的AES信息结构的内存;8.若ZIP包中还存在其他文件,定位到下一个文件;9.关闭打开的流。二.AES加密和解密算法构成如图3所示,AES加密算法的核心部分包括:SubBytes(字节替代),ShiftRows(行移位),MixColumns(列混淆),AddRoundKey(轮密钥加)。AES解密算法是加密的逆过程,所以除了AddRoundKey(轮密钥加)不变外,其余的都需要进行逆变换,InvSubBytes(逆字节替代),InvShiftRows(逆行移位),InvMixColumns(逆列混淆)。1.字节代替字节本文档来自技高网
...
一种基于Zlib库和AES算法的ZIP包解压方法

【技术保护点】
一种基于Zlib库和AES算法的ZIP包解压方法,其特征在于,包括以下步骤:1)获取网站的ZIP包数据,从ZIP包中读取文件并判断其是否采用AES算法进行加密;2)对于采用AES算法进行加密的ZIP包数据,在Zlib库基础上添加AES算法来对ZIP包进行解密和解压。

【技术特征摘要】
1.一种基于Zlib库和AES算法的ZIP包解压方法,其特征在于,包括以下步骤:1)获取网站的ZIP包数据,从ZIP包中读取文件并判断其是否采用AES算法进行加密;2)对于采用AES算法进行加密的ZIP包数据,在Zlib库基础上添加AES算法来对ZIP包进行解密和解压。2.如权利要求1所述的方法,其特征在于,步骤2)将AES算法封装在静态库文件中,将Zlib库封装在libz.so动态库文件中。3.如权利要求1或2所述的方法,其特征在于,所述AES算法包括:a)AES加密过程,其包括:字节替代、行移位、列混淆、轮密钥加;b)AES解密过程,其包括:逆字节替代、逆行移位、逆列混淆、轮密钥加。4.如权利要求3所述的方法,其特征在于,所述字节替代通过S盒完成一个字节到另外一个字节的映射,该映射是一个关于字节的非线性变换。5.如权利要求3所述的方...

【专利技术属性】
技术研发人员:孙永超
申请(专利权)人:北京锐安科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1