我在我的项目中使用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;
}
当我调用这个函数时,我得到了“OK”,并且压缩文件已经创建,我在这里错过了什么?
LibZip版本1.1.3-1,操作系统:Fedora 25
谢谢。
zip_set_default_password
似乎只设置加密时的默认密码,没有提到激活加密。您可能还需要调用 https://libzip.org/documentation/zip_file_set_encryption.html。 - Eelkezip_file_set_encryption
是来自libzip 1.2版本,而我使用的是旧版1.1.3,所以我需要先更新版本,然后再进行测试,谢谢! - Simon