使用libZip设置Zip文件密码无效求助:调用函数后提取无需密码
解决libZip设置密码后解压无需验证的问题
看起来你遇到的问题是典型的只设置了密码但未启用文件加密的情况,在libZip 1.1.3这个版本里,zip_set_default_password()只是设置全局默认密码,但不会自动对添加到压缩包的文件启用加密——你还需要手动为每个文件指定加密方式。
下面是具体的解决步骤和注意点:
为每个添加的文件启用加密
在调用zip_add()或zip_replace()添加文件到压缩包后,你需要调用zip_set_file_encryption()来为该文件指定加密算法。因为已经设置了默认密码,最后一个参数可以传NULL,它会自动使用之前设置的默认密码。示例代码片段:zip_t *zip = zip_open("output.zip", ZIP_CREATE | ZIP_TRUNCATE, &err); if (!zip) { // 错误处理 } // 设置默认密码 if (zip_set_default_password(zip, "your_secure_password") < 0) { // 密码设置错误处理 } // 添加文件到压缩包 zip_source_t *source = zip_source_file(zip, "input.txt", 0, -1); zip_int64_t file_idx = zip_add(zip, "input.txt", source); if (file_idx < 0) { // 添加文件错误处理 zip_source_free(source); zip_close(zip); return; } // 为该文件启用传统ZIP加密(大多数解压工具都支持) if (zip_set_file_encryption(zip, file_idx, ZIP_ENC_METHOD_STANDARD, NULL) < 0) { // 加密设置错误处理 } // 关闭压缩包 zip_close(zip);注意加密算法的选择
libZip 1.1.3支持两种主要加密方式:ZIP_ENC_METHOD_STANDARD:传统ZIP加密,兼容性好,几乎所有解压工具都支持,但安全性较低。ZIP_ENC_METHOD_AES_256:AES-256加密,安全性更高,但需要libZip编译时启用OpenSSL支持。如果你的Fedora 25包已经包含了这个支持,可以使用它,但要注意部分旧解压工具可能不兼容。
验证libZip的加密支持
虽然Fedora官方包通常会启用加密支持,但你可以通过检查zip_get_encryption_methods()返回的结果,确认当前libZip支持哪些加密算法。
按照上面的步骤修改代码后,重新生成的压缩包在解压时就会要求输入密码了。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

