加密知识文档

简约无双

一、核心概念与原理

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 证书、算哈希等操作。

日常常见用途

  1. 文件加解密:openssl enc,就是聊的 AES 加密单文件
  2. 计算哈希:openssl sha256 文件,校验文件完整性
  3. 密钥、证书管理:生成 RSA 私钥、自签名证书(HTTPS 内网证书)、解析证书,服务器运维最常用
  4. 测试 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 是一份公开的加密协议标准,它规定了加密文件、签名、密钥该用什么样的数据格式、流程,不同软件只要遵守这套标准,生成的加密文件就可以互相解开。

先理清三个极易搞混名词的关系

  1. PGP(Pretty Good Privacy):最早 1991 年由 Phil Zimmermann 写出来的商业闭源软件,是整套技术的起源,现在属于 Broadcom 公司。
  2. OpenPGP:IETF 把原来 PGP 的整套逻辑整理、公开,制定成开放标准(RFC-9580,现行最新规范),任何人都可以免费照着这个标准自己写加密程序,不用付版权费。它只是文档、规则,本身不能直接运行。
  3. GnuPG(gpg)实现了 OpenPGP 标准的开源免费软件,就是你在 Kubuntu 终端敲 gpg 运行的那个程序,是 OpenPGP 最主流的实现之一。

OpenPGP 标准里定义了什么

  1. 文件/消息加密数据包格式
  2. 对称加密(密码加密文件):内置高强度密钥派生规则,不用用户手动调迭代次数
  3. 非对称公私钥整套流程:密钥格式、密钥 ID、指纹
  4. 数字签名:给文件打上身份印记,证明文件是谁发的、有没有被篡改
  5. 信任网络(Web of Trust):独立于 CA 证书的身份信任机制
  6. ASCII 装甲格式(.asc):把二进制密文转成纯文本,方便粘贴到邮件、聊天框

OpenPGP 最核心特点

  1. 互通性:符合标准的软件互相兼容——GnuPG 加密的 .gpg,Windows 的 Gpg4win、Sequoia-PGP 都能解。而 openssl 的 .enc 没有统一格式,只能用 openssl 解。
  2. 双层加密机制:公钥加密时先生成临时会话密钥,用会话密钥 AES 加密大文件,再拿对方公钥加密这个小小的会话密钥,兼顾安全和速度(标准规定死的)。
  3. 自带完整性校验:能直接检测传输途中是否被篡改。

日常使用场景:开源项目发布包签名、加密邮件、人与人之间传递加密文件,几乎全基于 OpenPGP 标准。你敲 gpg 命令,本质就是调用一个遵循 OpenPGP 标准的程序。

5. GnuPG(gpg) 是什么

OpenPGP 的开源实现,专门实现 OpenPGP 标准,一开始就是为加密邮件、传递加密文件而生。它有一整套上层逻辑:密钥环、信任网络、数字签名,对称加密只是其中一小部分功能。Kubuntu 默认一般预装,没有就 sudo apt install gnupg

  1. 对称加密(密码加密文件)gpg -c 文件,直接输密码加密,默认 KDF 参数已经调好,开箱安全,不用手动写迭代次数

    1
    2
    gpg -c secret.pdf        # 加密,生成 secret.pdf.gpg
    gpg -d secret.pdf.gpg # 解密

    全程不用手动调任何安全参数,默认就是安全配置。

  2. 非对称加密(公钥私钥):用对方公钥加密,对方用自己私钥解密,不需要传递密码,这才是 gpg 最强的地方。

  3. 数字签名:证明文件是谁发的、中途有没有被篡改,开源软件发布包几乎都用 gpg 签名校验完整性。

  4. 输出格式是标准 .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 隐藏包内文件名
  • 压缩:自带压缩,文件体积通常变小
  • 跨平台:全平台能解压,别人拿到很容易打开
  • 弱点:
    1. 必须整体解压,不能单独取出包里某一个文件,改一个文件就得全部解压、重新打包加密
    2. 没有独立密钥恢复机制,忘了密码就彻底打不开,没有主密钥
    3. 归档一旦局部损坏,整个包大概率报废

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. 四大工具一句话定位

  1. 7-Zip:打包压缩+加密归档,最适合打包一堆文件发给普通人,对方随便解压
  2. gpg:标准 PGP 加密,人与人安全传递文件、签名,默认安全
  3. openssl:底层密码工具箱,适合高级脚本、自定义加密流
  4. gocryptfs / VeraCrypt:文件夹/虚拟盘保险箱,长期存放本机私密资料,后台自动加密

三、按场景选择实操方案

1. 打包加密发给别人 → 7-Zip 加密压缩包

最通用,跨 Windows / Mac / Linux 都能解开,可以传给别人,最推荐日常分享用

  • Windows:用 WinRAR / 7-Zip。选中文件 → 右键「添加到压缩包」→ 设置里找设置密码,输入密码,勾选「加密文件名」(连文件名都看不见)→ 生成带密码压缩包。

    Windows 自带 zip 不支持加密,不能用右键直接打包加密,必须用 7-Zip、WinRAR。

  • Kubuntu:KDE 归档工具图形界面不能直接加密码,只能命令行。

    1
    2
    3
    4
    sudo 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
    7
    sudo 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
    3
    sudo 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 对称加密也是很舒服的选择(默认安全,不用调参)。

四、通用安全提醒

  1. 密码尽量长,不要简单密码;密码自己一定要记好,没有万能解锁办法,忘了密码文件基本救不回
  2. 加密之后最好另外备份一份原文件,避免加密文件损坏丢失。
  3. EFS / gocryptfs 这类绑定证书或主密钥的方案,务必单独备份证书 / masterkey 主密钥,否则设备或密码丢失将导致文件永久无法恢复。
  4. 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 进行许可。
评论