ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ZIP压缩包设置密码全攻略:从加密算法选择到避坑指南

ZIP压缩包设置密码全攻略:从加密算法选择到避坑指南 给ZIP压缩包设置密码这件事听起来简单到不值得写一篇文章但我自己在帮同事、朋友处理压缩包问题的过程中发现十个里有八个都卡在一些很基础的地方有人找不到密码入口有人设完密码发过去对方解不开还有人拿到一个有密码的压缩包却发现输入框根本弹不出来。这篇文章就把给ZIP设置密码这件事讲透——用什么工具、选什么加密方式、设完密码后可能踩哪些坑、忘记密码后还能怎么办。无论你是第一次给压缩包加密码的普通用户还是需要在服务器上用命令行处理压缩包的老手应该都能从里面找到对应自己那段的答案。1. 先想明白一件事你要的密码是防君子还是防破解1.1 不同场景加密强度要求完全不同先别急着打开压缩软件。给ZIP压缩包设置密码前最关键的问题是搞清楚你加密的目的是什么。我一般把需求分成三档每档对应的加密级别不一样第一档是防误看、防手滑。比如压缩一份内部共享的文档包发给同事只是不希望群里谁都能直接双击看到内容这个场景用最基础的ZipCrypto就够了胜在兼容性极高几乎所有解压工具都能处理。第二档是防一般好奇者。比如把身份证照片、合同扫描件发给中介或HR对方可能不是技术人员但你担心文件在传输过程中被截获。这种情况建议至少选AES-256加密内容虽然不能保证绝对安全但已经能挡住绝大多数非专业手段。第三档是防专业破解。比如服务器配置文件、数据库备份、客户敏感数据。这类内容老实说我不太建议用ZIP格式更推荐用7z格式加AES-256并开启文件名加密或者干脆用专门的加密工具。ZIP格式受历史兼容性限制在加密强度这件事上是存在明显天花板的。很多教程一上来就教操作步骤从来不问使用场景结果就是用户照着设了一个密码以为万事大吉实际上加密算法用的是最古老的ZipCrypto几分钟就能被工具跑出来。所以说设置密码之前先搞清楚需求比任何快捷操作都重要。1.2 工具选型决定了加密强度的天花板ZIP压缩包虽然格式统一但不同工具创建出来的加密包底层的加密算法和支持程度可能完全不一样。这是我整理的一个选型表建议先保存下来压缩工具支持的ZIP加密算法能否加密文件名免费跨平台Windows 10/11 自带右键压缩不支持设置密码否是仅Windows7-ZipZipCrypto、AES-256可选是Windows/LinuxWinRARZipCrypto创建ZIP时常见解压可支持AES-256可选共享软件Windows/macOS/LinuxmacOS 自带归档工具不支持设置密码否是仅macOSLinux/macOS 命令行 zipZipCrypto部分支持是Linux/macOS这张表解决了一个很常见的疑问为什么我压缩的时候根本没看到密码选项答案多半是你用的工具不对。Windows和macOS的自带压缩功能都没做密码入口不是你没找到是真没有。想要给ZIP压缩包设置密码就得靠第三方工具或者命令行。我自己主力用的是7-Zip后面会详细演示每一步操作。2. 实战演示四套工具设置ZIP密码的完整步骤2.1 Windows自带压缩功能没有密码入口别再找了很多搜如何给ZIP压缩包设置密码的朋友第一反应是右键文件 → 发送到 → 压缩(zipped)文件夹然后满世界找密码选项在哪。答案是没有。Windows 10和Windows 11自带的ZIP功能是纯压缩微软一直没有把加密功能加进去。所以如果你没有安装任何第三方压缩软件直接在系统自带功能里找密码设置是不可能的甚至压缩完的ZIP文件在资源管理器里双击预览都不弹密码框。网上有些教程会教你在系统里挂一个PowerShell模块或者用第三方Shell扩展给右键菜单加加密压缩选项。这些方法不是不能用但本质上都是绕路系统更新后很可能失效而且普通用户配置起来特别容易出问题。我的建议很直接如果确实需要在Windows上给ZIP设密码老老实实装一个7-Zip或WinRAR比任何土办法都省心。2.2 7-Zip免费开源加密功能最干净的推荐7-Zip是我装了十几年、从没卸载过的工具。它对ZIP格式的加密支持有两个关键点一是支持ZipCrypto和AES-256两种算法二是能选择是否加密文件名。设置密码的步骤非常短选中你要压缩的文件或文件夹右键 → 7-Zip → 添加到压缩包。在弹出的窗口里把压缩格式下拉框选为zip。往下找到加密区域输入密码并再次确认。在加密方式下拉框里选AES-256。如果希望别人连文件名都看不到可以勾选加密文件名。点确定生成带密码的ZIP包。这里有三件事新手特别容易搞混。第一压缩格式必须选zip。7-Zip的默认压缩格式其实是它自家的7z如果你用7z格式当然也能设置密码但那就不叫ZIP压缩包了。这篇文章既然是给ZIP加密码就要明确在压缩格式下拉框中选zip。第二加密方式下拉框里AES-256和ZipCrypto的差距非常大。我们常说ZIP密码不安全很多情况下指的就是ZipCrypto这种传统算法。具体原理第三章会展开讲这里先记住一句话能选AES-256就选AES-256。第三加密文件名这个选项。在ZIP格式下如果你勾选了加密文件名7-Zip会对文件名部分采用ZipCrypto机制来处理文件内容部分仍然可以按你选择的AES-256加密。但问题在于很多第三方解压工具对ZIP格式的加密文件名支持很差容易解出来一堆乱码甚至直接打不开。如果你既想要AES-256又想要文件名也保密我的建议是放弃ZIP格式直接用7z格式最省心。2.3 WinRAR兼容性优先的老牌选择WinRAR在国内装机量极大图形界面友好中文汉化也完整。虽然它最拿手的是自家RAR格式但同样能创建ZIP格式的加密压缩包。操作路径如下选中文件右键 → 添加到压缩文件。在常规选项卡里把压缩文件格式改为zip。切到高级选项卡点设置密码按钮。输入两遍密码。如果勾选加密文件名选项那么解压时必须先输密码才能看到压缩包里的文件列表。确定生成带密码的ZIP。WinRAR在创建ZIP格式时为了追求兼容性加密方式通常会走ZipCrypto这条传统路径。如果你特别在意AES-256更推荐用7-Zip。那WinRAR的优势在哪主要在于它解压兼容性很广你收到一个用AES-256加密的ZIP包身边只有WinRAR的话通常也能解反过来如果你用WinRAR创建的ZIP发给别人对方用Windows资源管理器自带的ZIP功能去双击虽然不会弹密码框但只要换成WinRAR或7-Zip就能正常解压。这里有个操作细节值得单独提醒WinRAR的加密文件名选项默认是不勾选的。很多用户设完密码就点击确定结果压缩包发过去对方虽然打不开文件但能在文件名列表里看到里面有哪些文件。如果文件名本身就包含敏感信息比如2024年度薪资表.zip那密码的意义就少了一半。所以是否勾选加密文件名取决于你有多在意隐私。2.4 macOS和Linux命令行没有图形界面时也能加密macOS自带的归档实用工具同样不支持设置密码这个系统习惯和Windows如出一辙。不过macOS和Linux都是Unix系系统自带zip命令行工具反而成了最灵活的一种方式。加密压成一个ZIP包最推荐用-e参数它会用交互式方式询问密码不会把密码留在命令行历史里zip -e archive.zip file.txt folder/执行后终端会提示你输入并确认一次密码。生成的archive.zip使用的是ZIP传统加密方式即ZipCrypto。有一种写法我强烈不建议在生产环境用zip -P MyPassword123 archive.zip file.txt-P参数虽然是一条命令搞定但密码会明文出现在shell历史记录、进程列表甚至系统审计日志里。如果你在共享服务器上这么敲过等于把密码公开在了一堆能看到history输出的人面前。Linux和macOS上解压带密码的ZIP包常规操作是unzip archive.zip如果压缩包设置了密码unzip会提示你输入。但这里有个隐藏问题发行版自带的unzip对AES-256加密的ZIP支持并不完整遇到用WinZip AES扩展加密的包可能直接报错。这种情况我建议用7z命令p7zip来处理AES-256支持更完整格式兼容也更好。3. 加密原理与伪加密为什么你的密码可能形同虚设3.1 ZipCrypto与AES-256到底差在哪很多人以为ZIP加密就是一个有或没有的问题实际不是。ZIP压缩包里能用的加密算法主要分两代。第一代是ZipCrypto由PKWARE在1990年代定义几乎所有压缩软件都支持。它的优点是兼容性极高缺点是安全性较弱。由于算法本身存在已知明文攻击的风险攻击者只要预判到压缩包里某个文件的固定文件头很多文件格式的头部字节是固定的就有可能在较短时间内恢复出密钥甚至不需要完整遍历密码空间。所以如果你用ZipCrypto加密一个大文件且里面存在已知结构的数据加密强度其实远低于普通人预期。第二代是AES-256。严格来说它不是ZIP原始规范里的原生选项而是WinZip后来提出的扩展方案被各家工具逐步采纳。AES-256采用256位密钥目前没有可行的暴力破解手段。7-Zip、新版WinRAR都能创建AES-256加密的ZIP包但部分老版本解压软件和手机自带文件管理器可能不支持解压时会报不支持的压缩方式之类的错误。所以你在设置密码时选ZipCrypto还是AES-256其实是在兼容性和安全性之间做取舍。我的默认原则是自己能控制两端工具的情况下一律AES-256如果把压缩包发给外部环境、发给客户手机那就要先想清楚对方用什么工具解压再决定要不要降级到ZipCrypto。3.2 什么是伪加密一个标志位造成的假密码热搜词里频繁出现zip伪加密这个现象非常有代表性。ZIP文件格式里有一个通用位标志general purpose bit flag其中第0位是加密标志位。正常加密的ZIP这个标志位是1。伪加密就是这个标志位被人为置1但文件内容并未真正经过密码加密。当你拿到这样一个压缩包时双击解压会弹出密码框但输入什么密码都打不开因为文件根本不存在真正的密码验证机制。理解了这一点你再看网上铺天盖地的zip密码移除工具zip解压密码清除工具思路就清晰了这些工具大部分处理的并不是真正破解密码而是识别出伪加密包把加密标志位改回0文件就能正常解压了。所以以后再看到秒移除ZIP密码的说法第一反应应该是要么这是伪加密要么工具只是在碰运气真正AES-256的包不可能秒破。怎么判断一个带密码的压缩包是不是伪加密我的经验是用7-Zip打开它。如果文件列表能看到每个文件名、原始大小、压缩率这些信息甚至缩略图都能显示出来但点击解压时要密码那大概率就是伪加密。想要进一步确认可以用十六进制编辑器打开ZIP文件查看文件头偏移处第6字节后的两个字节也就是通用位标志。正常加密显示0x0001伪加密常见也是这个位置被修改。确定是伪加密后可以用ZipCenOp这类格式修复工具处理或者在十六进制编辑器里直接把加密标志位改回0。注意这类操作只适用于你自己拥有的、被错误标记的压缩包别拿它去处理别人的加密文件那是另一回事了。3.3 文件名加密ZIP格式下的半吊子顺便把加密文件名这件事说透。ZIP格式如果想加密文件名目前主要依赖ZipCrypto机制因为WinZip AES扩展并没有定义一套标准的文件名加密方案。这就导致了几个连锁反应你在7-Zip里创建ZIP时如果勾选加密文件名实际文件名加密用的是ZipCrypto而不是你选的AES-256。文件名加密后接收方用Windows资源管理器双击ZIP可能什么都看不到用手机自带文件管理器也可能只看到乱码文件名。要让体验正常接收方往往必须使用支持ZipCrypto文件名字段解析的工具比如7-Zip或WinRAR。这一限制是ZIP格式本身的不是工具能彻底解决的。所以我在实际工作中有一个习惯用ZIP格式且需要加密文件名的时候压缩前先把文件名改成英文或拼音如果必须保留中文文件名就直接改用7z格式而不是在ZIP上死磕。4. 设置密码后最容易踩的四个坑从报错到解决4.1 输对了密码却提示错误先别急着怪密码这个场景遇到的概率非常高。我在Windows上用7-Zip给一个文件夹设置了AES-256密码把压缩包通过微信发给同事对方在手机上用系统自带文件管理器解压密码怎么输都提示不对。我确认自己密码没输错最后换了WinRAR一解顺利打开。排查链路建议按顺序走一遍先排除人工错误密码里有没有大小写、特殊符号、前后空格在中文输入法下输英文密码很容易混入全角字符这是高频原因。换成熟工具试解压用7-Zip或WinRAR打开同一个文件输入同样的密码。如果7-Zip能正常解压说明压缩包本身没问题是解压端工具太旧或对加密算法支持不完整。检查创建时的加密算法如果创建时选了AES-256扩展而解压端是Windows自带的右键解压、macOS的归档工具或者部分老手机App就会出现密码正确但解不开的情况。遇到这类问题最优解是让接收方换用7-Zip或WinRAR而不是重复试密码。这不是玄学是加密算法兼容性问题。4.2 压缩包有密码但界面上根本不弹密码框另一种很迷惑的情况压缩包文件图标上确实有锁的标识但双击打开时Windows资源管理器直接显示了ZIP内部文件列表完全不给你输入密码的机会。这个坑几乎都是Windows自带ZIP预览功能导致的。微软为了让用户不装软件也能浏览ZIP内置了一个轻量级解析器但它对加密ZIP的支持相当薄弱。它能看到加密ZIP的部分结构信息却不会像第三方工具那样弹密码框于是出现了一个有密码但没法输入密码的尴尬局面。解决办法也简单右键压缩包 → 打开方式 → 选择7-Zip或WinRAR或者先打开7-Zip再从文件管理器里定位到这个压缩包双击。只要换到第三方工具密码框就会正常出现。4.3 中文文件名乱码加密包更容易中招ZIP格式诞生得早文件名字符编码的历史包袱很重。早期ZIP默认使用本地系统编码简体中文Windows里就是GBK/CP936后来才慢慢流行UTF-8。但不同压缩软件对文件名到底用哪种编码的约定并不统一所以中文名乱码成了ZIP压缩包最经典的痛点。带密码的情况下乱码问题会更严重因为文件名列表被加密后工具可能连能不能正确显示文件名都判断不了。我实测过几个场景新版7-Zip压出来的UTF-8中文名ZIP包在老版WinRAR里打开是一堆乱码Windows老工具压出来的GBK中文名包在手机APP里解压也可能乱码。如果同时在加密接收方可能连乱码文件名都看不到直接报错。我的实战建议ZIP格式下外发文件压缩前就把文件名改成英文或拼音最省事如果必须用中文文件名优先考虑7z格式7-Zip对UTF-8的处理更统一或者在发送时同步告诉对方用哪个版本的工具解压。4.4 命令行压缩时密码失效或暴露在历史记录里以前在服务器上帮同事压缩一批配置文件图快直接用了zip -P命令如下zip -P DbPass!9 conf.zip /data/conf/*命令执行成功了文件也确实加密了。但两个隐患随之而来第一密码出现在shell历史记录里任何人执行history就能看到第二如果服务器上装有进程审计组件命令行参数也会被记录下来。对经常操作服务器的朋友来说这是一个非常容易忽略的安全漏洞。正确做法是使用交互模式zip -e conf.zip /data/conf/*如果脚本环境必须无人值守可以用7-Zip命令行版本密码通过环境变量或密钥文件传递而不是裸写在命令行里7z a -tzip -p -mheon conf.zip /data/conf/*-p不带参数时会提示输入密码-mheon表示加密文件头。这样既保留了自动化能力又不至于把密码留在历史记录里。总之记住一句话命令行里的密码能不住进历史记录就别让它住进去。5. 忘记密码后的自救与预防机制5.1 先判断是不是伪加密再决定下一步如果你手里有一个自己加密但忘记密码的ZIP包在彻底放弃之前先做一次伪加密检测。检测方法前面已经讲过用7-Zip打开看能不能直接看到文件名和压缩率信息或者用十六进制编辑器查看通用位标志。如果确认是伪加密用ZipCenOp这类格式修复工具把标志位纠正回来就行。这不属于破解只是修复文件格式异常。如果确认是真加密那就得接受一个现实AES-256加密的ZIP包没有密码几乎不可能恢复出内容。市面上那些ZIP密码恢复工具比如Advanced Archive Password Recovery、Hashcat、John the Ripper等本质上都是穷举或字典攻击。恢复时间完全取决于你的密码强度和电脑算力如果密码是8位生日组合可能几分钟到几小时如果是20位随机字符那基本等于永久遗忘早点重新生成数据更实际。这里必须强调一句这类恢复工具的合法使用场景仅限于自己拥有或明确授权的压缩包。拿它去尝试打开别人发给你的加密文件既不符合职业道德也可能触犯相关法律。5.2 避免遗忘密码的预防性习惯方案再好不如不遗忘。我在踩过太多次坑之后慢慢形成了一套固定习惯重要压缩包统一用7-Zip加AES-256并加密文件名单独建一个目录存放。密码用KeePass或Bitwarden这类本地密码管理器保存不再只靠脑子记。压缩包和密码不要放在同一个传输渠道。比如压缩包走邮件附件密码走即时通讯单独发即使邮件被截获文件也解不开。每次设完密码立刻做一次解压测试验证密码真的有效而不是等要用的时候再发现当初输错了。最后一点尤其重要尤其是从网上复制密码、手滑多打一个空格这种低级失误事后排查特别浪费时间。5.3 一个实用扩展用7z替代zip的边界虽然这篇文章主题是ZIP压缩包但如果你经常接触机密文件压缩加密我还是建议认真考虑一下7z格式。7z格式对AES-256的支持没有ZIP那么多历史包袱加密文件名更彻底中文名乱码问题也更少。代价是接收方必须有7-Zip或WinRAR这类现代工具手机端的部分文件管理器也需要安装额外插件才能解压。我的习惯是需要对外传输、兼容性优先时用ZIP自己存档或在内网小范围内传递机密文件时用7z。你也可以把同一份文件压成两份一份加密ZIP用于通用解压一份7z用于自己长期保存双保险成本只是多占用一点磁盘空间。最后再分享一个我自己坚持了很多年的习惯每次给压缩包设完密码我没有立刻把它发出去而是先留在本地用刚设的密码做一次完整解压测试确认文件内容能正常打开、文件名不乱码、密码大小写也对然后再发送或存档。这个动作只需要十秒钟但能省掉之后无数次的你密码是不是输错了式的沟通成本。真的密码设得再好都不如多验证一次来得踏实。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进