有脚下有糖第6部解压码嘛

后使用我的收藏没有帐号?
所属分类: &
查看: 8|回复: 0
えびてん?漫画文件合集的解压密码是什么
发表于 昨天&22:59
えびてん?漫画文件合集的解压密码是什么
点这里&&&&
金鸡报晓送福利,手游新春感恩大回馈!2195人阅读
据说对.rar文件的解压是没有开源库的,而且好多软件都是收费的,因此这里便不再探讨对.rar文件的解压,下面研究一下.zip文件。
不可否认,zlib是当今应用最广泛的压缩与解压缩.zip文件的免费库之一,zlib是一种事实上的业界标准(不信可以自己去百度),而且用法简单,对于有密码的zip文件也能轻松应对(当然我们首先得知道解压所需的密码)。
下面我将讲解一下如何用zlib.lib和minizip.lib来对一个带密码的.zip压缩文件进行解压。废话少说,开始分析:
1. 将zlib.lib和minizip.lib放到工程下(因为是静态库,所以将两个文件与其他工程文件放到同一个目录中即可)
2. 将ioapi.h和unzip.h和zip.h和zlib.h放到工程下(我为了看着清洁,为这几个文件建立了文件夹--zlib)
3. 在工程的.cpp文件的头部,添加如下代码:
#include &zlib\unzip.h&
#include &zlib\zlib.h&
#include &zlib\zip.h&
#pragma comment( lib, &zlib.lib& )
// 将静态库引用进来
#pragma comment( lib, &minizip.lib& )
好,经过以上三条,用zlib所需的环境已准备好(以上文件均可在网上下载到),很简单吧。
废话少说,上代码:
注:因为zip文件对于zlib来说相当于是以文件(个人觉得也可以理解为数据块)的形式存在的,在进行解压时,会把zip中的文件(文件夹)当成一块一块的数据进行读取,因此zlib会从zip文件中按顺序一个一个文件(文件夹)的读取,如果是文件,则写成文件,如果是文件夹,则需要用户来自己创立该文件夹的路径,因为zlib不能往不存在的路径中写文件(这是我经过测试发现的)。以上的注释是下面程序的执行过程
#define ZIP_OPEN_FAILED
#define ZIP_GETGLOBAL_FAILED
#define ZIP_GETFILE_FAILED
#define ZIP_CREATEFILE_FAILED
#define ZIP_OPENPSDFILE_FAILED
#define ZIP_OPENFILE_FAILED
#define ZIP_READFILE_ERR
#define MAX_BUFSIZE
4096 // 从zip文件中一次读取的最大缓冲值
//函数名称:UnzipFile
//函数功能:解压zip文件
//输入参数:strFilePath 带解压zip文件的路径+名称
strTmpPath
解压到这个路径下
//返 回 值:参考ConfigInfo.h
int CUnzip::UnzipFile(CString strFilePath, CString strTmpPath, CString strPsd)
unzFile uf = NULL;
unz_global_info *p_gInfo = NULL;
unz_file_info
*p_fInfo = NULL;
p_gInfo = new unz_global_
p_fInfo = new unz_file_
CString strZipPath = strFileP
uf = unzOpen(strZipPath);
// 打开zip文件,返回文件句柄
if (NULL == uf)
return ZIP_OPEN_FAILED;
// 打开失败
if (UNZ_OK != unzGetGlobalInfo(uf, p_gInfo))// 向*pglobal_info结构体中写入zip的信息
return ZIP_GETGLOBAL_FAILED;
// 获取zip信息失败
CString strZipFName(_T(&&));
// 用于存放szZipFName
CString strFolderName(_T(&&));
CString strDiskPath(_T(&&));
// 创建磁盘路径(文件夹)时会用到
CString strDiskFile(_T(&&));
// 创建磁盘文件时会用到
char szZipFName[MAX_PATH] = &0&;
// 存放从zip中解析出来的“文件(信息块)”名字
char szReadBuf[MAX_BUFSIZE] = &0&;
// unzReadCurrentFile读取的字符数
DWORD dWrite = 0;
// 实际写入的字节数
int nState = strFilePath.ReverseFind(_T('\\'));
//strTmpPath += CString(_T(&\&)) + strFilePath.Mid(nState+1, strFilePath.ReverseFind(_T('.'))-nState-1);
CreateFilePath(strTmpPath);
// strFilePath为F:\\file.zip,解压到E:\\TEST下,则先创建目录E:\\TEST\\file
for (int i = 0; i & p_gInfo-&number_ i++)
// for reading the content of the current zipfile, you can open it, read data
// from it, and close it (you can close it before reading all the file)
if (UNZ_OK != unzGetCurrentFileInfo(uf, p_fInfo, szZipFName, MAX_PATH, NULL, 0, NULL, 0))
return ZIP_GETFILE_FAILED;
switch (p_fInfo-&external_fa)
case FILE_ATTRIBUTE_DIRECTORY:
FormatDirectorys(szZipFName);
strFolderName = szZipFN
strDiskPath = strTmpPath + CString(_T(&\&)) + strFolderN
CreateFilePath(strDiskPath); // 创建目录(文件夹)
FormatDirectorys(szZipFName);
strZipFName = szZipFN
strDiskFile = strTmpPath + CString(_T(&\&)) + strZipFN
HANDLE hFile = CreateFile(strDiskFile, GENERIC_WRITE, // 对文件进行只写访问
// 独占对文件的访问
NULL, OPEN_ALWAYS,
// 打开已有文件,若存在则直接打开,否则创建新文件
FILE_ATTRIBUTE_HIDDEN | FILE_FLAG_WRITE_THROUGH, // 隐藏文件 | 进制对文件写入操作进行缓存以减少数据丢失的可能性
if (INVALID_HANDLE_VALUE == hFile)
return ZIP_CREATEFILE_FAILED;
// 文件打开(创建)失败
if (strPsd.IsEmpty())
if (UNZ_OK != unzOpenCurrentFile(uf))
CloseHandle(hFile);
// 打开失败
return ZIP_OPENFILE_FAILED;
if (UNZ_OK != unzOpenCurrentFilePassword(uf, strPsd))
CloseHandle(hFile);
// 打开有密码的zip压缩包中的文件失败
return ZIP_OPENPSDFILE_FAILED;
while(TRUE)
memset(szReadBuf, 0, MAX_BUFSIZE);
nNum = unzReadCurrentFile(uf, szReadBuf, MAX_BUFSIZE); // 从zip中读数据
if (nNum & 0)
unzCloseCurrentFile(uf);
CloseHandle(hFile);
return ZIP_READFILE_ERR;
else if (nNum == 0)
unzCloseCurrentFile(uf);
CloseHandle(hFile);
if (!WriteFile(hFile, szReadBuf, MAX_BUFSIZE, &dWrite, NULL))// 往本地磁盘写数据
unzCloseCurrentFile(uf);
CloseHandle(hFile);
return (GetLastError());
unzGoToNextFile(uf);
unzClose(uf);
return -1;
// 在磁盘中创建路径strPath
void C**Dlg::OnCreateFilePath(CString strPath)
CString strFolder(&&);
for (nPos = 0; nPos != -1; nPos = strPath.Find(&\&))
nPos = strPath.Find(&\&);
strFolder += strPath.Left(nPos);
if (!PathFileExists(strFolder))
CreateDirectory(strFolder, NULL);
strPath = strPath.Mid(nPos+1);
strFolder += &\&;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
积分:48221
积分:48221
排名:第50名
原创:674篇
转载:1984篇
评论:478条
(15)(10)(10)(10)(8)(30)(19)(19)(16)(1)(9)(7)(19)(13)(9)(4)(5)(28)(12)(34)(5)(3)(13)(27)(18)(11)(3)(23)(24)(31)(42)(12)(34)(19)(37)(41)(39)(56)(146)(66)(78)(78)(6)(15)(28)(26)(17)(57)(46)(25)(41)(24)(37)(70)(73)(28)(31)(35)(49)(54)(27)(25)(16)(21)(13)(24)(26)(35)(31)(27)(6)(6)(2)(3)(3)(7)(5)(10)(4)(9)(3)(2)(12)(11)(23)(5)(1)(9)(16)(11)(14)(4)(4)(28)(17)(37)(413)(2)(7)(1)(3)(4)(7)(6)(10)(28)(9)(6)解压包的密码忘记了怎么办。。。有解决方法吗。。
可用积分 点
APP积分 点
以前备份的办公资料的解压包密码忘记了。。现在重新做了系统又需要用。。有什么办法能解压出来吗
这帖子真心不错。我要推到微博啥的给小伙伴们看看:
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
除了删还是删?
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
下了个暴力破解,终于搞好了
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
来自移动设备
破解不用gpu么
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
来自移动设备
haley 发表于
10:02 下了个暴力破解,终于搞好了
不是说6位的很难破吗。 你的是几位的。
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
pokemonet 发表于
不是说6位的很难破吗。 你的是几位的。
要看是纯数字 还是数字+字母&&如果在来点汉字 字符啥的 就可以直接删了
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
pokemonet 发表于
不是说6位的很难破吗。 你的是几位的。
还好设置的纯字母。。2分多就破掉了
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
早期的zip加密形同虚设,不过rar和7z理论上是不可破解的
自己知道密码的一些特征就好说,否则不如花时间想别的办法了
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
碰到忘记解压密码这种情况一般我用基本都解的开
这人还没添加签名啦。别再看她啦
可用积分 点
APP积分 点
来自移动设备
lz用的哪个软件。
这人还没添加签名啦。别再看她啦
Powered by
作者:八毛鱼
你有新的消息
弹出框标题
弹出框内容
弹出框标题
弹出框内容

参考资料

 

随机推荐