如何使用 libZip 设置 zip 文件的密码

Sim*_*mon 7 c++ libzip

我在我的项目中使用libZip,我成功创建了 zip 文件输出,但我很难为 zip 文件设置密码。

我正在调用zip_set_default_password函数,并且得到了 OK 响应,但是当我尝试提取它时,它并没有要求输入密码。

代码示例:

int CompressWithPassword(const char * psFileContent, int iFileSize, const char * pcPassword)
{
    zip_source *psZipSource = NULL;
    zip_int64_t iIndex = 0;
    int iError = EOK;
    const char * pcZipOutputPath = "/home/user/Documents/myzip.zip";

    // Open zip file.
    m_psZip =
            zip_open(pcZipOutputPath,
                    ZIP_CREATE /*Create the archive if it does not exist*/,
                    &iError);

    // Zip opend ?
    if(iError != ZIP_ER_OK)
    {
        Close();
        return iError;
    }

    // Generate zip source content.
    psZipSource =
            zip_source_buffer(m_psZip,
                              psFileContent,
                              iFileSize,
                              0);

    // Valid zip source ?
    if(psZipSource == NULL)
    {
        Close();
        iError = -1;
        return iError;
    }

    iIndex =
            zip_file_add(m_psZip,
                         pcZipOutputPath,
                         psZipSource, ZIP_FL_OVERWRITE);
    if(iIndex < 0)
    {    
        Close();
        return iIndex;
    }

    // Create password
    int iRetPassword =
                zip_set_default_password(m_psZip, pcPassword);

    // password set ?
    if (iRetPassword == -1)
    {
        Close();
        return iRetPassword;
    }

    // Close zip file.
    Close();

    return iError;
}
Run Code Online (Sandbox Code Playgroud)

当我调用这个函数时,我一切正常并且创建了 zip 文件,我在这里缺少什么?

LibZip 版本 1.1.3-1,操作系统:fedora 25

谢谢。

小智 1

正如 Libzip 文档中所述如果您使用 'zip_fopen' 打开文件,'zip_set_default_password' 将“设置访问加密文件时使用的默认密码”。否则,如果您对单个文件有不同的密码,则可以使用“zip_fopen_encrypted”打开它们。

如果要加密添加到存档中的文件,则需要将“zip_file_set_encryption”与(m_psZip、iIndex、您选择的方法、pcPassword)一起使用。