最可靠方式是交互式设密码:运行 zip -e archive.zip file1 file2,系统两次提示输入密码(不回显),避免密码泄露;-e 必须紧邻 zip,不可与 -r 颠倒顺序;-P 参数虽支持自动化但明文暴露风险高,推荐环境变量或 read -s 读取;加密强度取决于版本,传统 PKZIP 加密弱,AES-256 需新版支持;压缩目录务必加 -r,否则仅创建空目录;高安全场景应改用 gpg + tar。

用 zip -e 交互式设密码最可靠
直接运行 zip -e archive.zip file1 file2,系统会两次提示你输入密码(不回显),输错一次就失败重来。这种方式强制人工确认,避免密码写在命令行里被 ps 或历史记录泄露。注意:-e 必须紧跟 zip 命令,不能和 -r 混用顺序(比如 zip -re 是合法的,但 zip -er 会报错)。
-P 参数能自动传密码,但有安全风险
像 zip -P "mypass123" -r backup.zip docs/ 这样写,确实能跳过交互、适合脚本,但密码明文出现在进程参数中,任何用户执行 ps aux | grep zip 都能看到。如果必须自动化,建议改用环境变量 + shell 封装,例如:
ZIP_PASSWORD="mypass123" zip -e -r backup.zip docs/
,再在脚本里用 read -s 读取密码,或配合 expect 工具模拟交互。
加密强度取决于 zip 版本和解压端支持
Linux 默认的 zip(Info-ZIP)只支持传统 PKZIP 加密,安全性较弱,容易被暴力破解;较新版本(≥3.0)配合 unzip 支持 AES-256,但需额外启用(如编译时加 --enable-aes)。Windows 上用 7-Zip 或 WinZip 解压时通常能自动识别 AES,但原生资源管理器只认传统加密。验证是否用了 AES:解压时报错 unsupported compression method (99) 就说明对方不支持 AES。
目录压缩别漏掉 -r,否则 zip 包里是空文件夹
对目录操作时,zip 默认不递归,只打包目录本身(即一个空条目)。必须加 -r 才能包含子文件和子目录。常见错误命令:zip -e secret.zip mydir/ → 解压后 mydir/ 是空的;正确写法:zip -re secret.zip mydir/。如果同时要排除某些文件(比如日志),-x 要放在最后:zip -re backup.zip src/ -x "*.log"。
密码不是万能锁,PKZIP 加密本身已过时;真正需要高安全性时,别依赖 zip 内置加密,改用 gpg + tar 组合更稳妥。











