首页
社区
课程
招聘
[求助]关于利用7z(lzma)源代码进行大批量文件打包及文件名加密的问题
发表于: 2013-10-30 01:54 12629

[求助]关于利用7z(lzma)源代码进行大批量文件打包及文件名加密的问题

2013-10-30 01:54
12629
求助:如何用LZMA进行加密打包、文件名加密,相关函数是哪个?例如:创建压缩包、将文件添加到压缩包等方面的函数
问题详述:
前阶段我写的小工具需要用到文件打包压缩的功能,原来已有的zip源代码可以实现打包压缩,但是无法做到文件名加密等拓展功能,知道7z比我有的zip功能更强大,后来在7z的网站(http://sparanoid.com/lab/7z/)上下载了源代码LZMA SDK。
解压后发现,一大堆代码,根据网上常见的代码,我知道单个文件压缩的函数。
以下是压缩单个文件的代码:
#include <stdio.h>
#include <tchar.h>
#include <Types.h>
#include <LzmaLib.h>
#pragma comment(lib, "7z lib comprile.lib")

int _tmain(int argc, _TCHAR* argv[])
{

        FILE *pFile;
        _tfopen_s(&pFile,_T("1.pdf"),_T("rb"));
        if (pFile == NULL)
        {
                _ftprintf_s(stderr,_T("Error to Open the file!"));
                return -1;
        }

        fseek(pFile,0,SEEK_END);
        size_t srcLen = ftell(pFile);
        rewind(pFile);
        size_t destLen = srcLen*2;
        unsigned char *psrcRead = new unsigned char[srcLen]; //原始文件数据
        unsigned char *pDecomress = new unsigned char[srcLen]; //存放解压缩数据
        unsigned char *pLzma = new unsigned char[destLen]; //存放压缩数据

        fread(psrcRead,sizeof(char),srcLen,pFile);
        unsigned char prop[5];
        size_t sizeProp = 5;

        if (SZ_OK != LzmaCompress(pLzma,&destLen,psrcRead,srcLen,prop,&sizeProp,5,(1<<24),3,0,2,32,2))
        {//出错了
                _ftprintf_s(stderr,_T("压缩时出错!"));
                delete psrcRead;
                delete pDecomress;
                delete pLzma;
                fclose(pFile);
                return -1;
        }

        FILE *pCompressFile;
        _tfopen_s(&pCompressFile,_T("compress.dat"),_T("wb")); //写入压缩后的数据
        if (pCompressFile == NULL)
        {
                _ftprintf_s(stderr,_T("创建文件出错!"));
                delete psrcRead;
                delete pDecomress;
                delete pLzma;
                fclose(pFile);
                return -1;
        }
        fwrite(pLzma,sizeof(char),destLen,pCompressFile);
        fclose(pCompressFile);

        FILE *pDecompressFile;
        _tfopen_s(&pDecompressFile,_T("decompress.dat"),_T("wb")); //写入解压缩数据
        if (pDecompressFile == NULL)
        {
                _ftprintf_s(stderr,_T("写入数据出错!"));
                delete psrcRead;
                delete pDecomress;
                delete pLzma;
                fclose(pFile);
                return -1;
        }
        if (SZ_OK != LzmaUncompress(pDecomress,&srcLen,pLzma,&destLen,prop,5))
        {
                delete psrcRead;
                delete pDecomress;
                delete pLzma;

                fclose(pDecompressFile);
                fclose(pFile);
                return -1;
        }
        fwrite(pDecomress,sizeof(char),srcLen,pDecompressFile);

        delete psrcRead;
        delete pDecomress;
        delete pLzma;

        fclose(pDecompressFile);
        fclose(pFile);
        return 0;
}

但是我想知道关于创建压缩包、文件添加到压缩包、文件名加密等方面的函数在哪里,望有相关经验的大牛指点指点!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 341
活跃值: (138)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
路过。。。关注。。。
2013-10-30 08:40
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
7z 里面有一个7z manager 的GUI程序。 这个GUI里面会去调用 相关的函数。 你去GUI的界面里面找吧。
2013-10-30 08:54
0
雪    币: 822
活跃值: (279)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
谢谢你的建议,这查找范围虽说还是很大,但总比没有好。
2013-10-30 09:29
0
雪    币: 11007
活跃值: (17509)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
路过,帮楼主顶一下贴子
2013-10-30 12:42
0
雪    币: 822
活跃值: (279)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
公布新进展:
本人昨天按照whnet的思路找,结果让我找到压缩方法的切入点了。
现公布出来:
……\lzma922\CPP\7zip\UI\Client7z
该路径下有一个工程,编译之后生成Client7z.exe,该exe带参数a是压缩。
Client7z.cpp有源代码,大家可以细看。

因为工作的原因,现在还没时间仔细研究,也没能将这段代码融入自己的工具里,所以说目前并未发现任何新疑问。
现在剩下一个问题,文件名加密的方法仍没找到,望各位大牛有空了帮找找, 小弟谢谢了。
2013-10-31 08:56
0
雪    币: 822
活跃值: (279)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
沉了 沉了 顶起!
2013-11-6 10:10
0
游客
登录 | 注册 方可回帖
返回
//