Qt实现解压带有密码的加密文件

目录
  • 1.指定zip压缩包状态
  • 2.创建解压文件
  • 3.获取实际的压缩数量
  • 4.遍历方式创建解压缩文件
    • 4.1设置解压文件的参数
    • 4.2以读的方式打开加密文件
    • 4.3获取当前文件的所有内容
    • 4.4创建解压缩后的同名文件
  • 5.关闭zip压缩包

上一章节中介绍了如何使用Qt编译quazip库以及对文件加解密的简单应用,那么,今天我们继续深挖关于解密操作的功能吧!

简单的解密一个压缩包,可以使用#include "JlCompress.h"中的函数进行静态操作。如果你只是需要简单的应用那么,这个文件中的功能就基本可以满足了。

在我们开发过程中,为了资料的保密性期间,一般情况下都会对压缩包进行加密,那么我们还要使用静态函数的方式进行解密那就不支持了。那么,我们该如何解密带有密码的加密文件呢?

这也是当前文章中的重点啦!

根据官网上给出的结果,一般我们会采取QuaZipFile类来进行非静态的解密方式,该方式也支持了带有密码的压缩包文件。

接下来我来具体讲述该如何实现带有密码的压缩包解密方法吧!

开发环境:VS2017 + Qt5.14.2 x64 win10系统

1.指定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文件被打开,用于在存档中添加文件

2.创建解压文件

当我们成功打开压缩文件后的第一步需要创建解压文件,否则解压的文件无法存储。

QString dstPath = qsUnzipFiles;
if (!dstPath.endsWith("/") && !dstPath.endsWith("\\"))
{
	dstPath += "/";
}

QDir dir(qsUnzipFiles);
if (!dir.exists())
{
	dir.mkpath(qsUnzipFiles);
}

3.获取实际的压缩数量

int nCount = zip.getEntriesCount(); //压缩实体数量

4.遍历方式创建解压缩文件

这也是解压缩文件的重点了。

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();

}

5.关闭zip压缩包

zip.close();

这个操作是一定要有的!

到这里,带有密码的压缩包就可以解压出来了!

到此这篇关于Qt实现解压带有密码的加密文件的文章就介绍到这了,更多相关Qt解压加密文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaScript 如何在线解压 ZIP 文件

    一.ZIP 格式简介 ZIP 文件格式是一种数据压缩和文档储存的文件格式,原名 Deflate,发明者为菲尔·卡茨(Phil Katz),他于 1989 年 1 月公布了该格式的资料.ZIP 通常使用后缀名 ".zip",它的 MIME 格式为 "application/zip".目前,ZIP 格式属于几种主流的压缩格式之一,其竞争者包括RAR 格式以及开放源码的 7z 格式. ZIP 是一种相当简单的分别压缩每个文件的存档格式,分别压缩文件允许不必读取另外的数据而

  • Qt QFile文件操作的具体使用

    目录 QFile文件操作 QFile+QTextStream QFile+QDataStream 很多应用程序都需要具备操作文件的能力,包括对文件内容进行读/写.创建和删除文件等,甚至某些应用程序的诞生纯粹是为了操作文件,比如 WPS Office.PDFedit 等.为此,Qt 框架提供了 QFile 类专门用来操作文件. QFile文件操作 QFile 类支持对文件进行读取.写入.删除.重命名.拷贝等操作,它既可以操作文件文件,也可以操作二进制文件. 使用 QFile 类操作文件之前,程序中

  • 解决Python复杂zip文件的解压问题

    废话不多说,直接看问题,使用过 Python 中的标准库 zipfile 解压过 zip 格式压缩包的朋友们,可能遇到过,当压缩文件中的目录或文件名中包含中文等常见 unicode 字符时,典型如下面的例子: 使用 zipfile 的 extract() 或 extractall() 方法直接解压时,产生的解压结果名充斥着乱码,这一点我们通过调用 namelist() 方法就可以看出来: from zipfile import ZipFile # 读入压缩包文件 file = ZipFile('

  • Python实现加密的RAR文件解压的方法(密码已知)

    博主之前在网上找了很多资料,发现rarfile库不能直接调用,需要安装unrar模块,下面将详细介绍整个实现流程. 第一步:安装unrar模块,直接pip install unrar可能会找不到库,需要下载unrar library,也就是UnRAR.dll,下载地址为:http://www.rarlab.com/rar/UnRARDLL.exe: 第二步:将unrar安装路径添加到系统环境变量,64位操作系统的路径为C:\Program Files (x86)\UnrarDLL\x64,然后还

  • C/C++ Qt 基本文件读写的基本使用(2种实现)

    目录 QT基本文件读写 QTextStream 实现流读写 文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处 理而开发的,所以文件读写是应用程序开发的一个基本功能. Qt文件操作有两种方式,第一种使用QFile类的IODevice读写功能直接读写,第二种是利用 QFile和QTextStream结合起来,用流的方式进行文件读写. 第一种,利用QFile中的相关函数,实现对文件的读写操作,QFile会调用IODevice设备,从而实现文件读写. QT基本文件读写 通

  • qt5之QFile读写文件功能详解

    本文实例为大家分享了qt5之QFile读写文件功能的具体代码,供大家参考,具体内容如下 1.效果 读写文件用到的是QFile类, 这里,我显示文件内容用到的是 QTextEdit 2.创建打开和关闭按钮 // 打开文件     btnOpenFile     = new QToolButton;     btnOpenFile->setText(tr("open a file"));     btnOpenFile->setToolTip(tr("open a f

  • QT中如何读写ini配置文件

    如图1所示,我们需要在QT界面中实现手动读取参数存放的位置,那么我们该如何做呢? 方法:读取ini格式的配置文件,实现路径的写入与读取. 第一步:界面构造函数中,初始化一个Config.ini文件 //初始化一个.ini配置文件 //qApp是QT系统自带的,可以直接使用 QString iniFilePath=qApp->applicationDirPath()+"/Config.ini"; //如果不存在Config.ini,便生成一个Config.ini.如果已经存在了,则

  • Qt实现解压带有密码的加密文件

    目录 1.指定zip压缩包状态 2.创建解压文件 3.获取实际的压缩数量 4.遍历方式创建解压缩文件 4.1设置解压文件的参数 4.2以读的方式打开加密文件 4.3获取当前文件的所有内容 4.4创建解压缩后的同名文件 5.关闭zip压缩包 上一章节中介绍了如何使用Qt编译quazip库以及对文件加解密的简单应用,那么,今天我们继续深挖关于解密操作的功能吧! 简单的解密一个压缩包,可以使用#include "JlCompress.h"中的函数进行静态操作.如果你只是需要简单的应用那么,这

  • 用python批量解压带密码的压缩包

    项目地址: https://github.com/Mario-Hero/toolUnRar 环境需求 Windows系统 Python 3 对于解压RAR文件,需要安装WinRAR 对于解压7z/zip等其他7-Zip支持解压的文件,需要安装7-Zip 用法 Usage 直接拖入文件夹或压缩文件即可批量解压缩包含密码的压缩文件.如果拖入的是文件夹,则会把该文件夹下的压缩文件解压缩,但不进入下一级目录.通过设置PASSWD来设置字典,通过设置DELETEIT来设置解压后是否删除被成功解压的压缩文件

  • python 解压、复制、删除 文件的实例代码

    压缩复制删除文件基于python语言怎么操作呢,压缩文件有四种格式:zip.rar.tar.tar.gz,在压缩过程中也容易出现很多问题,今天小编通过代码给大家详解,具体内容如下所示: 一.python3解压文件 1.python 解压文件代码示例 如下代码主要实现zip.rar.tar.tar.gz四种格式的压缩文件的解压 def unzip_file(src_file, dst_dir=None, unzipped_files=None, del_flag=True): ""&qu

  • C#调用动态unlha32.dll解压Lha后缀的打包文件分享

    复制代码 代码如下: public class LhaUtity    {        ///取得DLL的版本        [DllImport("unlha32")]        private static extern UInt16 UnlhaGetVersion(); /// <summary>        /// '取得DLL的执行情况        /// </summary>        /// <returns>是否成功&l

  • 手把手教你使用Python解决简单的zip文件解压密码

    目录 简介 文件创建 纯数字密码 字母数字混合密码 补充说明 简介 使用的核心模块是python标准库中的zipfile模块.这个模块可以实现zip文件的各种功能,具体可以查看官方参考文档.这里的暴力破解的意思是对密码可能序列中的值一个一个进行密码尝试,这对人来说是很难的,可是对计算机而言并不难.有时候我们下载的zip文件需要密码解压而我们不知道,需要付费才知道.所以这里主要介绍两种暴力破解的密码:纯数字密码和英文数字组合密码. 文件创建 首先测试文件为test.txt(仅包含单行文本),压缩后

  • java调用7zip解压压缩包的实例

    前言 最近的项目中需要用到解压缩包的功能,客户给出的压缩包的格式主要是rar和zip,因此就打算使用java调用7zip的命令行进行解压文件,本文主要记录一下实现的过程以及其中遇到的问题. 7zip命令行 7z <command> [<switches>...] <archive_name> [<file_names>...][<@listfiles...>] 7z的commands中包含添加文件到压缩包.从压缩包中删除文件以及提取文件等等多个命

  • Win7x64下Mysql5.7.18解压版的安装方法

    相关阅读: 解决Win7 x64安装解压版mysql 5.7.18 winx64出现服务无法启动问题 1.下载安装包 百度云链接 2.解压后放到C:\Program Files\MySQL\mysql5.7.18 3.在文件夹下创建my.ini,内容为: [mysqld] #免密登录 skip-grant-tables bind-address = 0.0.0.0 port = 3306 basedir=C:/Program Files/mysql/mysql5.7.18 datadir=C:/

  • windows下安装、卸载mysql服务的方法(mysql 5.6 zip解压版安装教程)

    MySQL是一个小巧玲珑但功能强大的数据库,目前十分流行.但是官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的.很多人下了zip格式的解压发现没有setup.exe,面对一堆文件一头雾水,不知如何安装.下面笔者将介绍如何解决此情况下安装过程中的各种问题. 比较简单的步骤: 在win2003及win2008 r2以上版本: 将下载下来的mysql解压到指定目录下(如:d:\mysql) 安装服务 在命令行输入 d:\mysql\bin\mysqld -install net sta

  • java 解压与压缩文件夹的实例详解

     java 解压与压缩文件夹的实例详解 注意:JDK7支持设置编码设置编码格式 zipFile,zipInputStream,zipOutputStream都增加了编码格式,如果是jdk1.6需要其他的包辅助 下面为自带jdk压缩文件夹代码: public void dozip(String srcfile, String zipfile) throws IOException { String temp = ""; File src = new File(srcfile); File

  • mysql8.0.0 winx64.zip解压版安装配置教程

    本文记录了mysql8.0.0 winx64.zip解压版安装教程,具体内容如下 1.自己到mysql官网下载mysql-8.0.0-dmr-winx64.zip解压缩安装包 2.下载页面地址:官网地址 3.解压缩到任意目录(我自己是D:\DevTools\mysql-8.0.0) 4.配置环境变量添加path路径为你的mysql8.0.0路径下面的bin目录(我的目录是D:\DevTools\mysql-8.0.0\bin) 5.到你的解压目录下面修改default-my.ini如下图标识 b

随机推荐