PHP ZipArchive设置密码不生效 加密压缩包无法用指定密码打开
问题原因
你对ZipArchive::setPassword方法的作用理解有误,该方法仅用于读取已加密的压缩包时设置解压用的默认密码,无法用于设置压缩加密阶段的密码,这是你设置的密码不生效的核心原因。
解决方案
加密压缩时不需要调用setPassword,直接将密码作为第三个参数传入setEncryptionName方法即可,你的代码调整后如下:
$zip = new ZipArchive(); if ($zip->open('test.zip', ZipArchive::CREATE) === TRUE) { $zip->addFile('thing1.txt'); // 添加文件的顺序不变 // 加密时直接指定密码 $zip->setEncryptionName('thing1.txt', ZipArchive::EM_AES_256, 'mypassword'); $zip->close(); }
注意事项
- 你当前使用的PHP 7.3 + Libzip 1.8环境完全支持上述语法,无需额外调整环境配置
- 如果有多个文件需要加密,对每个文件调用
setEncryptionName时传入相同的密码即可 - 测试解压时优先使用7-Zip等支持AES-256加密标准的解压工具,部分老旧解压工具不兼容该加密标准,会误报密码错误
内容的提问来源于stack exchange,提问作者fractal5
相关产品推荐
相关产品推荐

