C的zip库,可以在Windows上创build密码保护的zip文件?

任何人都知道一个C库,可以在Windows上创build密码保护的zip文件? 看来,使用内置的zip实用程序密码保护zip文件的选项已经从Windows 7中删除,但我不认为这是一个问题。

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的代码。 包括stdio.h zip.h unzip.h

首先,用一个密码创建一个带有文件的zip文件。 该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);