证书包、导出的员工表、带私钥的配置,最后常常进了个人网盘或公司共享盘。上传页会写「传输加密」「静态加密」「保险箱」。这些词说的是服务商自己的磁盘和链路,不是「除了你,谁都解不开」。另一篇写过怎么用 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、文件头、解不开

下面这组步骤不依赖任何品牌承诺。用一个可丢弃的小文本文件做,不要拿真实证件练手。

  1. 新建一个几十字节的 probe.txt,写入一句只有你知道的测试句,例如 orange-lake-7。不要用真实口令或证件。
  2. 打开开发者工具 Network,勾选「保留日志」。再打开文件加密页,选中该文件,设一口令,开始加密。
  3. 逐条看 Fetch / XHR:请求行和请求体里不应出现 orange-lake-7,也不应出现你刚输入的口令。分析上报同样不该带走原文。允许出现的是脚本、样式和与文件体无关的统计。
  4. 下载得到的 .lock 或 .enc,用十六进制查看器看文件头前四字节,应是 43 53 4C 4B(ASCII CSLK)。再往后应能看见原始文件名 probe.txt 的明文,而不是测试句本身。
  5. 把该密文拖回同一页解密,输入正确口令,应还原测试句;改一个口令字符,解密应失败,而不是给出乱码正文。
  6. 这之后,才把 .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 里是否还能搜到测试句原文。