任何人都知道可以在Windows上創建受密碼保護的zip文件的C庫嗎?看來,使用內置zip實用程序密碼保護zip文件的選項已從Windows 7中刪除,但我不認爲這是一個問題。C壓縮庫,可以在Windows上創建密碼保護的zip文件?
zziplib或7-Zip SDK可以這樣做嗎?
任何人都知道可以在Windows上創建受密碼保護的zip文件的C庫嗎?看來,使用內置zip實用程序密碼保護zip文件的選項已從Windows 7中刪除,但我不認爲這是一個問題。C壓縮庫,可以在Windows上創建密碼保護的zip文件?
zziplib或7-Zip SDK可以這樣做嗎?
7-Zip的SDK(LZMA SDK)支持密碼保護的存檔。
相關SO後:
https://stackoverflow.com/questions/221049/how-secure-is-7-zip
LZMA SDK:
http://www.7-zip.org/sdk.html
如果你可以使用.NET,請DotNetZip:http://dotnetzip.codeplex.com/
C++ .NET例如創建密碼保護的ZIP: http://cheeso.members.winisp.net/DotNetZipHelp/Code%20Examples/Cpp.htm
MINIZIP + zlib的支持AES 256加密,而且非常好用!
基於minizip unzip.c的代碼。 include stdio.h zip.h unzip.h
首先,用密碼創建一個帶有文件的zip文件。 壓縮文件必須與可執行文件位於同一目錄中。 從生成的程序的目錄中的提示運行程序。這個例子只提取第一個文件!
/*-----------start-------------- */
/*Tries to open the zip in the current directory.*/
unzFile zfile = unzOpen("teste.zip");
if(zfile==NULL)
{
printf("Error!");
return;
}
printf("OK Zip teste.zip opened...\n");
int err = unzGoToFirstFile(zfile);/*go to first file in zip*/
if (err != UNZ_OK)
{
printf("error %d with zipfile in unzGoToFirstFile\n", err);
unzClose(zfile);/*close zip*/
}
/*At this point zfile points to the first file contained in the zip*/
char filename_inzip[256] = {0};/* The file name will be returned here */
unz_file_info file_info = {0};/*strcuture with info of the first file*/
err = unzGetCurrentFileInfo(zfile, &file_info, filename_inzip, sizeof(filename_inzip), NULL, 0, NULL, 0);
if (err != UNZ_OK)
{
printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
}
else
{
int len = 8192;/*size of chunk*/
char buffer[8192]={0};/*buffer used to save uncompressed data*/
printf("name of first file is :%s\n",filename_inzip);
printf("uncompressed_size = %d\n",file_info.uncompressed_size);
/*Use your password here, the same one used to create your zip */
err = unzOpenCurrentFilePassword(zfile, "yourpassword");
if (err != UNZ_OK)
printf("error %d with zipfile in unzOpenCurrentFilePassword\n", err);
else
printf("password ok\n");
FILE *fp = fopen(filename_inzip, "wb");/*file for data binary type*/
if (fp != NULL)
{
do
{/*read the current file returned by unzGoToFirstFile to buffer in chunks of the 8192*/
err = unzReadCurrentFile(zfile, &buffer, len);
if (err < 0)
{
printf("error %d with zipfile in unzReadCurrentFile\n", err);
break;
}
if (err == 0)
break;
/*Save the chunk read to the file*/
if (fwrite(&buffer, err, 1, fp) != 1)/*if error break*/
{
printf("error %d in writing extracted file\n", errno);
err = UNZ_ERRNO;
break;
}/*else continue*/
}
while (err > 0);
/*close file*/
fclose(fp);
}
}
unzClose(zfile);
LZMA SDK看起來像它會工作...它的遺憾是沒有二進制發行版。 – freedrull 2011-01-23 02:30:55