加密知识文档
一、核心概念与原理
1. 什么是“真加密”
- 改后缀名、隐藏文件:不算加密,只是藏起来,任何人改回去就能打开,完全不安全。
- 真正的加密必须对文件内容做密码学变换,没有密码或密钥就无法还原。
2. 加密工具的三种层级
不同工具处于不同抽象层级,理解这点后后面所有对比都好懂:
- 成品工具(开箱即用、参数固定):7-Zip、VeraCrypt、gocryptfs。加密逻辑、打包逻辑已全部封装好,用户只要填密码。
类比:好比一台完整保险柜,关上输密码直接用,出厂设置已经调好防盗。
- 协议标准(只定义规则、不能直接运行):OpenPGP。规定加密文件/签名/密钥该用什么数据格式与流程,不同软件遵守同一标准就能互相解开。
类比:OpenPGP = USB 接口规范(图纸,规定插头该长什么样);GnuPG = 一根实际能用的 USB 数据线(照着图纸做出来,可以拿来用)。
- 底层库 / 工具箱(参数全手动):OpenSSL。只提供 AES、RSA 这些零散密码零件,没有规定你该怎么组装成完整加密包,组装逻辑全部交给使用者自己决定,参数写错加密就不安全。
类比:好比给你一堆锁芯、钢板、螺丝,你自己组装保险柜,装对了就安全,装错就形同虚设。
3. OpenSSL 是什么
OpenSSL 是一套开源、免费的密码学工具库 + 命令行程序,用 C 语言写的,是全世界最常用的加密/解密、证书工具。它不是某一种加密软件,而是一整套密码工具箱。
- libssl / libcrypto(底层库):一堆加密算法实现代码(AES-256、RSA、ECC、SHA256、MD5 等),别的软件拿来调用。几乎所有 Linux、服务器软件都依赖它:浏览器、Nginx/Apache、SSH、git,它们做 HTTPS 加密时,很多都是靠 OpenSSL 库完成加密运算。Kubuntu 默认预装,系统本身就要用它。
- openssl 命令行工具:就是你在终端敲
openssl那个程序,给人直接用的命令接口,可以手动执行加密、解密、生成密钥、生成 SSL 证书、算哈希等操作。
日常常见用途
- 文件加解密:
openssl enc,就是聊的 AES 加密单文件 - 计算哈希:
openssl sha256 文件,校验文件完整性 - 密钥、证书管理:生成 RSA 私钥、自签名证书(HTTPS 内网证书)、解析证书,服务器运维最常用
- 测试 SSL 连接:
openssl s_client -connect baidu.com:443,排查 HTTPS 问题
关键区分:OpenSSL ≠ 加密软件
- 7-Zip 内部自己实现 AES-256,并不依赖 OpenSSL;OpenSSL 把所有参数(AES 模式、密钥派生方式、迭代次数)交给你自己调。
⚠️ 致命坑:默认密钥派生非常弱
直接执行下面的命令是旧的不安全密钥派生方式,没有 PBKDF2,迭代次数极低,弱密码极易被爆破:
1 | openssl enc -aes-256-ctr -in test.pdf -out test.pdf.enc |
安全写法必须显式指定 PBKDF2 与迭代次数:
1 | openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -in test.pdf -out test.pdf.enc |
不加 pbkdf2 的 openssl 加密,不建议用来存重要文件。
什么时候用 / 不用
- 适合:写脚本自动化加密、开发调试、运维证书处理、你懂密码参数并且愿意手动配置。
- 不适合:日常打包一堆文件加密、发给别人、不想研究加密参数(这种场景优先 7-Zip、VeraCrypt)。
4. OpenPGP 是什么
一句话:OpenPGP 是一份公开的加密协议标准,它规定了加密文件、签名、密钥该用什么样的数据格式、流程,不同软件只要遵守这套标准,生成的加密文件就可以互相解开。
先理清三个极易搞混名词的关系
- PGP(Pretty Good Privacy):最早 1991 年由 Phil Zimmermann 写出来的商业闭源软件,是整套技术的起源,现在属于 Broadcom 公司。
- OpenPGP:IETF 把原来 PGP 的整套逻辑整理、公开,制定成开放标准(RFC-9580,现行最新规范),任何人都可以免费照着这个标准自己写加密程序,不用付版权费。它只是文档、规则,本身不能直接运行。
- GnuPG(gpg):实现了 OpenPGP 标准的开源免费软件,就是你在 Kubuntu 终端敲
gpg运行的那个程序,是 OpenPGP 最主流的实现之一。
OpenPGP 标准里定义了什么
- 文件/消息加密数据包格式
- 对称加密(密码加密文件):内置高强度密钥派生规则,不用用户手动调迭代次数
- 非对称公私钥整套流程:密钥格式、密钥 ID、指纹
- 数字签名:给文件打上身份印记,证明文件是谁发的、有没有被篡改
- 信任网络(Web of Trust):独立于 CA 证书的身份信任机制
- ASCII 装甲格式(
.asc):把二进制密文转成纯文本,方便粘贴到邮件、聊天框
OpenPGP 最核心特点
- 互通性:符合标准的软件互相兼容——GnuPG 加密的
.gpg,Windows 的 Gpg4win、Sequoia-PGP 都能解。而 openssl 的.enc没有统一格式,只能用 openssl 解。 - 双层加密机制:公钥加密时先生成临时会话密钥,用会话密钥 AES 加密大文件,再拿对方公钥加密这个小小的会话密钥,兼顾安全和速度(标准规定死的)。
- 自带完整性校验:能直接检测传输途中是否被篡改。
日常使用场景:开源项目发布包签名、加密邮件、人与人之间传递加密文件,几乎全基于 OpenPGP 标准。你敲 gpg 命令,本质就是调用一个遵循 OpenPGP 标准的程序。
5. GnuPG(gpg) 是什么
OpenPGP 的开源实现,专门实现 OpenPGP 标准,一开始就是为加密邮件、传递加密文件而生。它有一整套上层逻辑:密钥环、信任网络、数字签名,对称加密只是其中一小部分功能。Kubuntu 默认一般预装,没有就 sudo apt install gnupg。
对称加密(密码加密文件):
gpg -c 文件,直接输密码加密,默认 KDF 参数已经调好,开箱安全,不用手动写迭代次数1
2gpg -c secret.pdf # 加密,生成 secret.pdf.gpg
gpg -d secret.pdf.gpg # 解密全程不用手动调任何安全参数,默认就是安全配置。
非对称加密(公钥私钥):用对方公钥加密,对方用自己私钥解密,不需要传递密码,这才是 gpg 最强的地方。
数字签名:证明文件是谁发的、中途有没有被篡改,开源软件发布包几乎都用 gpg 签名校验完整性。
输出格式是标准
.gpg/.asc,所有 PGP 兼容工具都能解开(Windows 的 Gpg4win、Mac 的 GPG-Suite)。
6. 7-Zip 是什么
成品归档加密工具,上层成品工具,已经把加密逻辑、打包逻辑全部封装好,参数固定、流程固定,用户只要填密码,开箱即用。它内部自己实现 AES-256,并不依赖 OpenSSL。
- 加密算法:AES-256,密钥由密码经过多次迭代哈希生成(SHA-256,大量轮次,抗暴力破解很强)
- 本质:先把多个文件/文件夹打包压缩成一个归档包,再加密整个归档
- 文件名加密:参数
-mhe=on可加密文件名,不输密码看不到包里有什么 - 自带压缩,体积通常变小;Windows/macOS/Linux 全都能解压
最推荐日常用:跨设备可用,别人拿到很容易打开。
7. 第三方虚拟盘工具:VeraCrypt 与 gocryptfs
- VeraCrypt:开源免费虚拟加密盘,Windows/Mac/Linux 全平台,非常安全,用来建加密容器放文件。做一个单独大文件当虚拟加密硬盘,挂载后像 U 盘一样用,保密等级最高。
- gocryptfs:成品保险箱,轻量 FUSE 文件夹加密(Kubuntu 推荐),不用 root 权限,文件单独加密,可以同步网盘(加密后直接上传不会泄露)。同类还有 Cryfs,能隐藏文件大小信息,网盘同步场景更安全。
二、工具横向对比
1. 7-Zip vs OpenSSL(归档加密 vs 原始流加密)
核心定位:7-Zip 是归档加密(打包+加密),OpenSSL 是原始流加密(只加密单文件,不打包),二者用途完全不一样,没有绝对谁更好,只看场景。
7-Zip(.7z)特性
- 支持批量:直接打包整个文件夹、一堆文件,保留文件名、目录结构、时间戳
- 文件名加密:
-mhe=on隐藏包内文件名 - 压缩:自带压缩,文件体积通常变小
- 跨平台:全平台能解压,别人拿到很容易打开
- 弱点:
- 必须整体解压,不能单独取出包里某一个文件,改一个文件就得全部解压、重新打包加密
- 没有独立密钥恢复机制,忘了密码就彻底打不开,没有主密钥
- 归档一旦局部损坏,整个包大概率报废
OpenSSL enc(生成 .enc 密文)特性
- 本质:直接对单个文件的二进制流加密,不打包、不压缩,不记录文件名
- 只能一次处理一个文件;密文里不保存原文件名、元数据,自己要记住原来是什么
- 不能直接加密文件夹:要先 tar 打包,再交给 openssl 加密
- 无压缩:密文大小 ≈ 原文件大小(CTR 模式严格等大)
- 跨平台:装了 openssl 就能解密,但普通人不会敲命令,不方便传给别人
- 优点:① 流式加密,大文件内存占用稳定;② 灵活,可自调加密模式、加盐;③ 不需额外安装(Kubuntu 默认自带)
- 致命坑:默认密钥派生非常弱,必须手动加
-pbkdf2 -iter 100000才安全。
安全性层面
AES 本身同是 AES-256,安全差距全部来自「从密码生成密钥」这一步(KDF):
- 7-Zip:内置高强度 KDF,几万轮哈希迭代,开箱安全,不需额外调参。
- openssl enc 默认旧行为:没有 pbkdf2,迭代次数极低,弱密码易跑字典。带上
-pbkdf2 -iter 100000才能接近 7-Zip 水平。
场景选择
- 选 7-Zip:打包多文件/整个文件夹;发给不想敲命令的人;不想调参数;需隐藏文件名;想顺带压缩。
- 选 OpenSSL:只加密单个独立文件;脚本自动化/管道流处理;需精细控制加密模式、加盐;临时快速加密不想装 p7zip。
一句话:日常加密文件、打包、分享 → 优先 7-Zip;脚本自动化、单文件流式加密且会正确写 pbkdf2 参数 → OpenSSL;直接裸用 openssl enc 是不安全的。
2. GnuPG(gpg) vs OpenSSL(成品通信套件 vs 底层工具箱)
定位:OpenSSL 主打算法、TLS/证书,原始能力全部裸露调参;GnuPG 是完整通信加密套件、遵循 OpenPGP 标准,默认安全,用于人与人之间传递加密消息/文件/邮件,附带密钥管理、签名信任链。
核心维度对比表
| 对比项 | GPG(GnuPG) | OpenSSL |
|---|---|---|
| 设计目标 | 人与人之间安全通信、文件/邮件加密、签名验签 | 底层密码原语、TLS、证书,通用密码工具箱 |
| 对称加密安全性 | 默认参数安全,高强度 KDF,不用手动调参 | 参数完全手动控制,默认旧模式不安全,必须手动加 PBKDF2 |
| 非对称加密 | 完整密钥管理、密钥环、信任网络,公钥分发体系成熟,日常传加密文件首选 | 只有原始 RSA/ECC 算法接口,没有上层密钥管理逻辑,自己从零写流程,极少用来传文件 |
| 数字签名 | 原生支持,签名同时绑定身份,广泛用于开源项目校验包完整性 | 只能做原始哈希签名,没有身份、信任链概念 |
| 文件加密格式 | 标准化 OpenPGP 格式,跨平台通用,别的 PGP 软件都能打开 | 自定义二进制流,没有统一格式,只能用 openssl 解密 |
| 文件夹处理 | 本身不能打包,要先 tar 打包再加密 | 本身不能打包,先 tar 打包再加密 |
| 适合脚本自动化 | 适合加密交付给他人的文件;参数固定 | 适合底层流式处理、管道连续运算,自由度极高 |
什么时候选谁
- 优先选 GPG:加密文件传给另一个人(可走公钥,不用发密码);给文件做签名;只想输密码加密不想折腾参数;加密邮件。
- 优先选 OpenSSL:写底层脚本/数据流处理;需精细调整加密模式、加盐、自定义密钥派生;做证书、HTTPS 调试、服务器运维。
3. 四大工具一句话定位
- 7-Zip:打包压缩+加密归档,最适合打包一堆文件发给普通人,对方随便解压
- gpg:标准 PGP 加密,人与人安全传递文件、签名,默认安全
- openssl:底层密码工具箱,适合高级脚本、自定义加密流
- gocryptfs / VeraCrypt:文件夹/虚拟盘保险箱,长期存放本机私密资料,后台自动加密
三、按场景选择实操方案
1. 打包加密发给别人 → 7-Zip 加密压缩包
最通用,跨 Windows / Mac / Linux 都能解开,可以传给别人,最推荐日常分享用。
Windows:用 WinRAR / 7-Zip。选中文件 → 右键「添加到压缩包」→ 设置里找设置密码,输入密码,勾选「加密文件名」(连文件名都看不见)→ 生成带密码压缩包。
Windows 自带 zip 不支持加密,不能用右键直接打包加密,必须用 7-Zip、WinRAR。
Kubuntu:KDE 归档工具图形界面不能直接加密码,只能命令行。
1
2
3
4sudo apt update
sudo apt install p7zip-full
7z a -p -mhe=on 私密文件.7z 文件1.pdf 文件夹A # 执行后输入密码,-mhe=on 开启加密文件名
7z x 私密文件.7z # 解压注意:普通 zip 格式原生加密是弱加密,不要用,一定要用 7z 格式 AES 加密。
2. 本机单文件加密 → Office/PDF 内部加密、openssl
Office / PDF 文档内部加密(仅针对文档本身):打开文档 → 文件 → 信息 → 保护文档 → 用密码进行加密,输入密码;PDF 在另存为时设置打开密码。
openssl 单文件加密:
1
2
3
4# 安全写法(务必带 pbkdf2 与迭代次数)
openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -in test.pdf -out test.pdf.enc
# 解密
openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -in test.pdf.enc -out test.pdf适合零散单独文档加密,不适合大量文件。
3. 本机私密文件夹 / 虚拟盘(长期存放)→ 保险箱类方案
适合放大量 / 长期私密资料,对应不同系统:
Windows 专业版 · EFS(NTFS 加密):右键文件/文件夹 → 属性 → 高级 → 勾选「加密内容以便保护数据」。
EFS 绑定当前用户账号,重装系统/换账号就打不开,无单独密码、靠系统证书解密,证书丢了文件直接报废。一定要备份加密证书。仅适合本机私密文件,不适合分享。
Windows 专业版 · BitLocker 虚拟加密磁盘:新建空白 vhd 虚拟磁盘 → 初始化 → 右键开启 BitLocker 设密码。平时打开要密码,关闭后全部锁起。家庭版没有 BitLocker。
Mac · dmg 磁盘映像(原生免费):打开「磁盘工具」→ 文件 → 新建映像 → 空白映像 → 大小设好、加密选 256 位 AES、设密码、不要勾选记住密码 → 生成 dmg,把文件拖进去,每次打开输密码。Mac 官方最稳妥方式(Mac 不支持直接给单个文件加密)。
Kubuntu · gocryptfs(轻量 FUSE 文件夹,推荐):
1
2
3
4
5
6
7sudo apt update
sudo apt install gocryptfs
mkdir ~/vault_crypt # 真正加密后的文件,平时不要碰
mkdir ~/vault # 打开这个文件夹就能直接读写明文
gocryptfs -init ~/vault_crypt # 初始化,设置密码;会输出 masterkey 主密钥,务必截图保存
gocryptfs ~/vault_crypt ~/vault # 挂载打开保险箱,往 ~/vault 放文件会自动加密
fusermount -u ~/vault # 用完卸载上锁(必须执行,否则一直开放)不用 root 权限,文件单独加密,可同步网盘。每次开机不自动挂载,需手动挂载输密码。同类还有 Cryfs(
sudo apt install cryfs,能隐藏文件大小,网盘同步更安全)。跨平台 · VeraCrypt 加密容器(最安全,与 Windows 互通):
1
2
3sudo add-apt-repository ppa:unit193/encryption
sudo apt update
sudo apt install veracrypt终端输入
veracrypt→ 创建加密卷 → 创建加密文件容器 → 跟向导设大小、密码。挂载选空闲槽位→选容器文件→挂载输密码;卸载选中卷点卸载立刻上锁。文件系统选 ext4 仅 Linux 用;选 exFAT 可 Windows 直接打开。
LUKS 全盘加密(仅安装系统时选):整个硬盘分区加密,只能重装系统时开启,不能事后单独加密某个文件夹,不要用来做日常文件加密。
4. 人与人安全传递文件 / 加密邮件 → GPG 公钥加密 + OpenPGP
- 用对方公钥加密文件,对方用自己私钥解密,不需要传递密码——这是 gpg 最强的地方。
- 还可对文件做数字签名,证明来源可信、中途未被篡改(开源软件发布包几乎都用 gpg 签名)。
- 输出标准
.gpg/.asc,所有 OpenPGP 兼容软件(Gpg4win、GPG-Suite、Sequoia-PGP)都能解开,互通性强。 - 单纯自己本地用密码存私密文件,
gpg -c对称加密也是很舒服的选择(默认安全,不用调参)。
四、通用安全提醒
- 密码尽量长,不要简单密码;密码自己一定要记好,没有万能解锁办法,忘了密码文件基本救不回。
- 加密之后最好另外备份一份原文件,避免加密文件损坏丢失。
- EFS / gocryptfs 这类绑定证书或主密钥的方案,务必单独备份证书 / masterkey 主密钥,否则设备或密码丢失将导致文件永久无法恢复。
- openssl 直接
enc默认 KDF 极弱,存重要文件必须显式加-pbkdf2 -iter 100000;日常打包分享优先用开箱安全的 7-Zip / VeraCrypt。
- 标题: 加密知识文档
- 作者: 简约无双
- 创建于 : 2026-08-14 00:00:00
- 更新于 : 2026-09-12 23:34:42
- 链接: https://blog.jianyuewushuang.top/2026/08/14/加密知识文档/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。