admin管理员组文章数量:1568304
简单的解密一个压缩包,可以使用`#include "JlCompress.h"`中的函数进行静态操作。如果你只是需要简单的应用那么,这个文件中的功能就基本可以满足了。
在我们开发过程中,为了资料的保密性期间,一般情况下都会对压缩包进行加密,那么我们还要使用静态函数的方式进行解密那就不支持了。那么,我们该如何解密带有密码的加密文件呢?
这也是当前文章中的重点啦!
根据官网上给出的结果,一般我们会采取**QuaZipFile**类来进行非静态的解密方式,该方式也支持了带有密码的压缩包文件。
接下来我来具体讲述该如何实现带有密码的压缩包解密方法吧!
开发环境:VS2017 + Qt5.14.2 x64 win10系统
第一步:指定zip压缩包状态
在我们操作压缩包的时候,首先要做的就是指明当前是需要压缩还是解压缩文件。
当前,我们实现的功能是解压缩文件,代码实现
QuaZip zip(qsZipFiles);
zip.open(QuaZip::mdUnzip); //解压模式打开
打开Zip文件的方式有以下几种
枚举 | 说明 |
QuaZip::mdNotOpen | ZIP文件没有打开。这是初始模式 |
QuaZip::mdUnzip | ZIP文件打开以读取里面的文件 |
QuaZip::mdCreate | ZIP文件是通过open()调用创建的 |
QuaZip::mdAppend | 以追加方式打开ZIP文件 |
QuaZip::mdAdd | ZIP文件被打开,用于在存档中添加文件 |
第二步:创建解压文件
当我们成功打开压缩文件后的第一步需要创建解压文件,否则解压的文件无法存储。
QString dstPath = qsUnzipFiles;
if (!dstPath.endsWith("/") && !dstPath.endsWith("\\"))
{
dstPath += "/";
}
QDir dir(qsUnzipFiles);
if (!dir.exists())
{
dir.mkpath(qsUnzipFiles);
}
第三步:获取实际的压缩数量
int nCount = zip.getEntriesCount(); //压缩实体数量
第四步:遍历方式创建解压缩文件
这也是解压缩文件的重点了。
QuaZip::goToFirstFile:将当前文件设置为存档中的第一个文件
QuaZip::goToNextFile:将当前文件设置为存档中的下一个文件
以for循环遍历的方式进行查询,在这里与之前的for循环不同的是以上两个函数的返回值都是bool值,这里我们也需要遍历bool值
for (bool suc = zip.goToFirstFile(); suc; suc = zip.goToNextFile())
{
//实际的文件处理
}
这个文件查找方式是如何操作的呢?
在实际运行过程中,goToFirstFile函数会从当前文件夹中的第一个文件夹进行遍历,一直遍历到该文件夹下面没有子文件为止。然后才会访问第二个文件夹。
在for循环中的实际处理是如何呢?
4.1:设置解压文件的参数
1:设置压缩包的名称
QuaZipFile zipFile;
QString qsTempZipName = zip.getZipName();
zipFile.setZipName(qsTempZipName);
2:设置当前需要解压的文件
QString filename = zip.getCurrentFileName();
zipFile.setFileName(filename);
代码解析:获取当前正在访问的文件夹,并设置需要读取的文件夹名称
4.2:以读的方式打开加密文件
bool bOpen = zipFile.open(QIODevice::ReadOnly, chPassword);
if(bOpen == false)
return false;
代码解析:只有在返回值bOpen是true的情况下才代表了读取成功。
如果返回值是false,在路径没有问题的情况下,基本上是密码错误。
注意!!!
在这里需要强烈注意的一点是:输入的密码一定是`const char*`类型,否则返回值一直是false。这个坑真的是让我特别无语!
4.3:获取当前文件的所有内容
QByteArray data = zipFile.readAll();
zipFile.close();
使用readAll的方式读取文件,这个方法就不再过多说明了,很简单,一定要记得,读取文件之后一定要关闭文件!
4.4:创建解压缩后的同名文件
if (filename.endsWith("/"))
{
dir.mkpath(filename);
}
else
{
dstFile.setFileName(dstPath + filename);
if (!dstFile.open(QIODevice::WriteOnly))
{
return false;
}
dstFile.write(data);
dstFile.close();
}
第五步:关闭zip压缩包
zip.close();
这个操作是一定要有的!
到这里,带有密码的压缩包就可以解压出来了!如果要是想看完整的项目过程可以查看以下链接
QuaZip解密带有密码的压缩包https://download.csdn/download/qq_32716885/79857000温馨提示,如果有想看QuaZip的开源类网站的,可以查看如下连接
QuaZip开源类资料http://quazip.sourceforge/classQuaZip.html#a2ea4bd1fca948637c35c2d2752bb5a80
今天的更新就到这里喽~
我是糯诺诺米团,一名C++开发程序媛~
版权声明:本文标题:Qt解压带有密码的加密文件 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1726164711a1058098.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论