证书包、导出的员工表、带私钥的配置,最后常常进了个人网盘或公司共享盘。上传页会写「传输加密」「静态加密」「保险箱」。这些词说的是服务商自己的磁盘和链路,不是「除了你,谁都解不开」。另一篇写过怎么用 Network 核对明文没有上传:口号无法证明。本文换一个具体场景——文件已经要离开这台电脑、进入别人的存储时,先分清谁拿得到明文,口令该走哪条路。
这不是「在线文件加密」功能清单,也不教你选哪一家网盘。问题只有三个:密文出站之前,明文有没有先变成密文;上传之后,服务商或下一个下载的人还能否直接打开;口令有没有和 .lock / .enc 捆在同一封邮件里。MyPassGen 的文件加密盒按这个边界工作:在浏览器里用 AES-256-GCM 算完,再下载结果;文件与口令不作为业务数据上传,打开即可使用。下面用对照表和可当场做的步骤说明边界。
「已加密」经常不是你以为的那一层
HTTPS 只保护传输路径上的窃听者。文件到达网盘服务器之后,服务商仍然可能以明文或「自己能解的密文」落盘。许多产品把这种服务商代管密钥的静态加密,写成「您的文件已加密」。对运维来说,这能防硬盘被顺走;对「不想让网盘侧看见证件扫描件」来说,不够。
客户端先加密再上传,是另一层:浏览器或本机程序用你持有的口令派生密钥,网盘上只留下密文。Rclone Crypt、部分同步工具、以及浏览器里的 Web Crypto,都属于这一层。它们解决的是「存储方拿不到可用明文」,不解决口令太弱、口令和文件一起发送、或文件名自己就把内容说穿。
《个人信息保护法》把证件号、金融账户等列为敏感个人信息,处理须特定目的与充分必要。把未加密的身份证扫描件丢进个人网盘再转给群,等于把识别能力一并转出。先加密再上传,减少的是存储方和路人直接打开的能力;它不是匿名化,也不能代替「这份文件该不该离开本机」。
先问谁能打开,再问算法名字
服务商代加密:服务商能打开,你也能打开。本机先加密:没有口令的人——包括网盘侧——打不开正文。口令和密文捆在一起:任何看到那条消息的人,都回到第一种。算法写 AES 并不能把第三种变成第二种。
谁拿得到明文:三种存放
把同一份 certs.zip 放进网盘,至少能分成三类。差别不在页面文案,而在密钥在谁手里、明文有没有先离开浏览器。
| 做法 | 网盘侧拿到什么 | 没有口令的下载者 |
|---|---|---|
| 直接上传原文件 | 完整明文(外加 TLS) | 能直接打开 |
| 网盘「保险箱 / 静态加密」 | 服务商可解的密文或明文 | 登录后通常仍能打开 |
本机先加密再上传 .lock / .enc |
密文;文件头可能仍有原名 | 没有口令则解不开正文 |
第三类才回答「不想让存储方看见正文」。它要求加密发生在上传之前,并且密钥不交给那台存储机器。上一篇已经写过:Web Crypto API 保证的是运算可以在本机发生,并不禁止页面先上传再加密。所以「本机先加密」必须用流量核对,不能用营销句核对。
AES-256-GCM 在这一步做什么
MyPassGen 初版只使用 AES-256-GCM。NIST SP 800-38D 把 GCM 规定为认证加密:密文被改过,解密应失败,而不是解出一段乱码还让你当正文。RFC 5116 里的 AEAD_AES_256_GCM 使用 32 字节密钥、12 字节 nonce、16 字节认证标签。MDN 的 AesGcmParams 同样建议 96 位 IV,且同一密钥下每次加密必须换新 IV。IV 本身不必保密,可以和密文放在一起。
口令不会直接当 AES 密钥用。本站文件盒用 PBKDF2、100,000 次迭代、SHA-256、16 字节盐,再得到 256 位密钥;盐写在文件头里,以便解密时复算。RFC 8018 引用 NIST SP 800-132:迭代次数应在可接受的等待时间内尽量大。OWASP 对「服务器存密码哈希」目前建议 PBKDF2-HMAC-SHA256 至少 600,000 次。文件口令的第一防线仍是足够长的随机口令——迭代次数挡的是离线穷举,挡不住 123456 写在网盘备注里。
口令不要和密文走同一条路
最常见的失败不是算法选错,而是:把 backup.lock 和「口令是夏天加工号」发在同一条群消息、同一封邮件、同一个网盘文件夹的 readme.txt 里。此时网盘侧或群成员同时拿到两半,本机加密等于没做。
稳妥的拆法是:密文走网盘或邮件附件;口令走另一条通道——当面、电话、或一次阅后即焚链接(密钥在 URL 的 # 后面,阅读页无需注册)。不要把口令写进文件名、压缩包注释或「仅自己可见」却仍存在同一账号下的备忘录。
口令本身建议用密码生成器在本机生成,随机模式长度 6–128,默认 16;低于 8 位应视为偏弱。忘记口令无法恢复:没有服务端明文备份,也没有「安全提问」。这是零知识存放的代价,不是功能缺失。
不要把原文件交给来路不明的「在线加密」
把整份证书包 POST 到会代算的网站,等于把明文写进对方日志。加密应在当前标签页完成,并且你能在 Network 里看见:业务请求没有文件体,也没有口令字段。下载到的应是 .lock 或 .enc,而不是对方服务器回的「已加密副本」链接。
打开 .lock 还能看见什么
密文不是「整份文件变成无法辨认的噪声」。可公开的容器头往往仍带着元数据。MyPassGen 默认输出 .lock,也可以选 .enc——两者是同一套格式,只是扩展名不同,方便和别的工具习惯对齐。文件头以四个字节 CSLK 开头,接着是版本号、16 字节盐、分块大小,以及原始文件名和 MIME 类型的明文。正文按约 1 MB 一块做 AES-GCM,每块自带 12 字节 IV 和 16 字节标签。
因此,把 身份证扫描件.pdf 加密成 身份证扫描件.pdf.lock 再上传,网盘列表和文件头都能看出「这是一份证件扫描」。加密保护的是字节内容,不是名字。名字敏感时,先把原文件改成无含义的名字再加密;上传后的 .lock 也不要用能读懂的标题。
单文件上限 5 GB。加密时按 Blob.slice 切成约 1 MB 再交给 crypto.subtle.encrypt。Web Crypto 的 encrypt() 一次只吃一份 BufferSource,整文件一次送进去,大文件会把标签页内存顶满。切片避免「一次把整份明文喂给接口」;结果仍会在本机拼成下载文件。解密当前实现会先读入整个 .lock,所以超大文件更吃内存——这是你能在任务管理器里核对的事实,不是口号。
当场核对:Network、文件头、解不开
下面这组步骤不依赖任何品牌承诺。用一个可丢弃的小文本文件做,不要拿真实证件练手。
- 新建一个几十字节的
probe.txt,写入一句只有你知道的测试句,例如orange-lake-7。不要用真实口令或证件。 - 打开开发者工具 Network,勾选「保留日志」。再打开文件加密页,选中该文件,设一口令,开始加密。
- 逐条看 Fetch / XHR:请求行和请求体里不应出现
orange-lake-7,也不应出现你刚输入的口令。分析上报同样不该带走原文。允许出现的是脚本、样式和与文件体无关的统计。 - 下载得到的
.lock或.enc,用十六进制查看器看文件头前四字节,应是43 53 4C 4B(ASCIICSLK)。再往后应能看见原始文件名probe.txt的明文,而不是测试句本身。 - 把该密文拖回同一页解密,输入正确口令,应还原测试句;改一个口令字符,解密应失败,而不是给出乱码正文。
- 这之后,才把
.lock上传到网盘。口令走另一条消息。回到网盘预览:不输入口令,应打不开原文。
MyPassGen 的文件加密盒按这个边界工作:AES-256-GCM,PBKDF2 100,000 次,单文件不超过 5 GB,输出 .lock / .enc。计算在当前标签页完成,无需注册。你要相信的仍是 Network 和文件头,不是页面上的「不会上传」五个字。
短机密别走整文件
一条 API Key、一段恢复码、一个数据库口令,不必先打成文件再加密。整文件流程适合证书包、导出表、磁盘镜像切片;短文本走阅后即焚更合适:明文上限 32 KB,服务端只暂存密文,密钥放在 # 后面,阅读次数和 TTL 可以设。创建与阅读都无需登录。
外发说明文档时,链接和正文是另一道工序。带 utm_source 的网址按哪些参数能删处理;工单里的手机号、证件号按哪些字段必须打码处理。加密文件解决的是「存储方打不开正文」,不是「讨论时少带完整号码」。
常见误区
「网盘写了加密,就等于只有我能看。」服务商代管密钥时,运维、执法调取和账号被盗,看到的仍是可用文件。本机先加密,才把「能解的人」收成持有口令的人。
「HTTPS 已经全程保护。」HTTPS 结束于服务商入站。落盘之后,保护范围换人。你要减少的是落盘那一份里的明文。
「扩展名改成 .lock 就是加密。」没有经过认证加密的改名,用记事本仍能搜到原文。文件头应有约定魔数,正文应解不开;只改后缀等于没做。
「口令忘了可以找客服找回。」零知识存放没有服务端口令副本。页脚也不提供客服邮箱来「重置加密口令」。口令只存在你自己的密码管理器或另一条你控制的通道里。
从哪一步开始
先处理今天就要上传的那一份。用可丢弃的小文件走完上一节的六步,确认 Network 没有原文、文件头是 CSLK、错口令解不开。然后再加密真实文件。名字敏感的,先改名。
密文上传网盘或当作邮件附件;口令当面说、打电话,或生成一条阅后即焚。不要把口令写进同一文件夹的文本。做完这一条,你就已经能回答本文的问题:网盘侧不该拿得到明文;口令不该和密文走同一条路;文件头里仍可能看见原名,需要单独处理。
常见问题
网盘的「保险箱」和本机先加密有什么差别?
保险箱通常仍由服务商持有或代管密钥,登录同一账号就能打开。本机先加密后,网盘侧没有口令解不开正文。账号被盗时,没有口令的人只能下载密文。
口令忘了还能解密吗?
不能。没有服务端明文或口令备份。请用足够长的随机口令,并单独存在你自己的密码管理器里。这是「存储方看不见正文」的对称代价。
.lock 和 .enc 有什么不同?
在本站里它们是同一套容器,只是扩展名不同。解密时两种后缀都可以拖回页面。不要假设别的软件的 .enc 能被同一套头解析。
加密需要注册吗?文件会不会上传?
不需要注册。把原文件交给会代算的网站,才有日志风险。本地处理时,文件与口令留在当前标签页;你要核对的是 Network 里有没有文件体或口令,以及 .lock 里是否还能搜到测试句原文。