加密(encryption)是什么?常见用途、实现方式与易混淆概念

加密是用密钥把明文转换成密文的过程,只有持有正确密钥的一方能还原出明文。它解决的是"数据被谁看到"的问题,而不是"数据有没有被改过"或"数据能不能被压缩"的问题。如果你要保护传输中的密码、磁盘上的文件、或者一段需要多人协作但不想让平台看到的文本,加密是直接手段;如果你只是要校验文件是否完整,或者把二进制塞进文本协议里,那需要的不是加密。下面按概念、分类、易混点、实现工具和常见坑依次说明。

加密的基本机制

加密由三样东西决定:算法、密钥、以及(多数情况下)随机参数。

  • 输入:明文 + 密钥(+ 随机数/IV)。
  • 动作:算法按密钥把明文打乱成密文。
  • 预期结果:没有密钥的人拿到密文,无法在合理时间内还原;有密钥的人可以解密回明文。

关键点在于:安全性来自密钥,而不是算法保密。现代加密算法(如 AES、ChaCha20)是公开的,公开反而让更多人能审查它。真正需要保密的是密钥本身。

对称加密与非对称加密

这是最核心的一组分类,决定了你该怎么用。

维度 对称加密 非对称加密
密钥 加密和解密用同一把密钥 公钥加密、私钥解密(或反过来签名)
速度 快,适合大量数据 慢,适合小数据或密钥交换
典型算法 AES、ChaCha20 RSA、ECC
典型场景 磁盘加密、文件加密、传输会话内容 密钥交换、数字签名、证书
主要难点 怎么把密钥安全地给对方 计算开销大、参数选择复杂

实际系统通常两者混用:用非对称加密协商出一把临时对称密钥,再用它加密真正的数据。这样既有非对称的密钥分发优势,又有对称的速度。

加密、哈希、编码:别混为一谈

这三个经常被当成一回事,但用途完全不同。

  • 加密:可逆(有密钥就能还原),目的是保密。例:AES 加密一段消息。
  • 哈希:不可逆,目的是校验或存密码。例:SHA-256、bcrypt。哈希不提供保密性,因为原文根本还原不出来。
  • 编码:可逆且不需要密钥,目的是换一种表示形式。例:Base64 把二进制转成文本,任何人都能解回。

一个常见错误是把 Base64 当成加密——它只是编码,没有任何保密作用。另一个错误是用普通哈希(如 MD5、SHA-1)存密码,正确做法是用带盐的慢哈希(如 bcrypt、PBKDF2)。

常见实现与工具

不同场景对应不同工具,选错工具往往比不加密更糟。

  • 传输层:TLS/HTTPS,浏览器和服务器自动完成,你通常不需要手动处理。
  • 文件与磁盘:GPG(文件/邮件加密)、VeraCrypt、gocryptfs、eCryptfs、EncFS 等。Defuse Security 的审计列表中出现了 gocryptfs、eCryptfs、EncFS、ZeroBin 等加密相关项目,说明这类工具是实际被审查和使用的对象。
  • 编程库:OpenSSL 是通用底层库;PHP 生态里有 php-encryption 这类封装库,把"选算法、生成 IV、认证"这些容易出错的步骤包起来,降低误用概率。
  • 在线工具:Defuse Security 提供 Encrypted Pastebin 这类服务,用于把文本加密后再分享,属于"加密 + 托管"的组合。

选择时优先用成熟的高层库,而不是自己拼底层原语。自己实现加密协议几乎必然出错。

常见误区与失败排查

加密出问题,通常不是算法被攻破,而是用法出错。

  • 密钥管理:密钥丢了数据就永久丢失;密钥泄露则加密形同虚设。密钥不能和密文放在一起。
  • IV/随机数复用:某些模式(如 CBC)要求每次加密使用不同的随机 IV。复用 IV 会泄露明文规律。Defuse Security 的研究列表里就有 "CBC Mode IV Security" 这一主题,说明这是被反复讨论的真实问题。
  • 模式选择:优先选带认证的加密模式(如 AES-GCM、ChaCha20-Poly1305),它能同时保证保密性和完整性。单纯 CBC 不防篡改。
  • 把编码当加密:Base64、URL 编码都不提供保密性。
  • 用哈希代替加密存密码:密码应该用带盐慢哈希,不是加密也不是快速哈希。

排查思路:先确认"我要的是保密、校验还是编码",再检查密钥是否安全、随机数是否唯一、模式是否带认证。

怎么选

  • 只是要传文件或邮件给特定的人:用 GPG 或类似的非对称工具。
  • 要保护整块磁盘或目录:用 VeraCrypt、gocryptfs 这类磁盘/文件系统级加密。
  • 在代码里加密数据:用语言生态里成熟的加密库,选带认证的模式,不要自己拼。
  • 只是要校验文件完整性:用哈希,不要加密。
  • 只是要把二进制放进文本:用 Base64,不要当成加密。

判断标准始终是同一个:你要防的是"被看到",还是"被改动",还是"表示形式"。三者对应加密、哈希、编码,选错方向,后面的努力都是白费。

defuse.ca
Defuse Security. Home of PIE Bin, TRENT, and more...
intellegit.com
peazip.github.io
Free file archiver utility for Windows, macOS, Linux, Open Source file compression and encryption software. Open, extract RAR TAR ZIP archives, 200...