2011-01-22 31 views

Respuesta

2

7-Zip SDK (LZMA SDK) apoya archivo protegido por contraseña.

relacionados, de manera mensaje:
https://stackoverflow.com/questions/221049/how-secure-is-7-zip

LZMA SDK:
http://www.7-zip.org/sdk.html

+0

LZMA SDK parece que funcionará ... es una lástima que no haya distribuciones binarias. – freedrull

+0

El LZMA SDK terminó siendo un dolor de usar, y no pude encontrar una función para proteger archivos con contraseña. ¡Esta pequeña lib, sin embargo, fue un pedazo de pastel para usar! http://www.codeproject.com/KB/files/zip_utils.aspx – freedrull

+0

Sin embargo, los archivos zip protegidos con contraseña que crea no funcionan en Windows 7 ... Windows 7 afirma que no son válidos cuando intenta abrirlos. – freedrull

0

minizip + zlib es compatible con AES 256 de cifrado, y es muy fácil de usar!

Código basado en minizip unzip.c. include stdio.h zip.h unzip.h

Primero, crea un zip con un archivo dentro con una contraseña. El archivo zip debe estar en el mismo directorio que el ejecutable. Ejecute el programa desde un aviso en el directorio del programa generado. ¡Este ejemplo solo extrae el primer archivo!

/*-----------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); 
Cuestiones relacionadas