Toolypet
Back to Blog
Security

加密基础:AES 与 RSA 的区别

了解对称加密和非对称加密的原理及实际应用场景。

Toolypet Team2 min read
加密基础:AES 与 RSA 的区别

守护数字世界的秘密

通过网上银行转账、用即时通讯软件与朋友聊天、在购物网站刷卡支付。在所有这些时刻,我们的敏感信息都在传输到世界某处的服务器。那么黑客为什么无法在中途截获这些信息呢?答案就在加密技术中。

加密是将可读数据(明文)转换为不可读形式(密文)的过程。就像小时候和朋友传递秘密纸条时,按照约定的规则替换字母一样。只是现代加密在数学上要复杂得多,即使动用现有的所有计算机也无法破解。

如今最广泛使用的两种加密方式是:AES(对称加密)和 RSA(非对称加密)。这些名称可能听起来很难,但一旦理解了概念,就能明白为什么需要两种方式,以及何时该使用哪种。

对称密钥与非对称密钥:根本区别

在加密的世界里,"密钥"就像打开锁的钥匙。对称加密使用同一把钥匙加锁和解锁。想象一下家门——用一把钥匙就能锁门和开门。简单快捷,但有个问题:如何安全地把钥匙传递给对方?

非对称加密优雅地解决了这个问题。它使用两把钥匙:一把是公钥(public key),可以向任何人公开;另一把是私钥(private key),绝对不能公开。用公钥加密的内容只能用私钥解密。就像邮箱一样——任何人都可以投递信件,但只有持有钥匙的人才能打开取出。

特性对称密钥 (AES)非对称密钥 (RSA)
密钥数量1个2个 (公钥/私钥)
速度慢 (100-1000倍)
密钥分发需要安全通道公钥可公开
主要用途大数据加密密钥交换、数字签名

AES:快速强大的对称加密

AES(Advanced Encryption Standard)是2001年美国政府采用的标准加密算法。由于之前使用的 DES 随着计算机性能提升而不再安全,经过全球密码学家的竞争后被选中。比利时密码学家创建的 Rijndael 算法就是主角。

AES 的优势在于速度。现代处理器内置了 AES 运算专用指令(AES-NI),可以瞬间加密千兆字节级别的数据。用密码加密文件、保护数据库中的敏感信息、加密整个磁盘时都会使用 AES。

根据密钥长度分为 AES-128、AES-192、AES-256。数字表示密钥的位数。AES-256 有 2^256 种可能的密钥组合,比宇宙中存在的原子数量还多。以目前的技术,暴力破解是不可能的。

但使用 AES 时有一个重要决定:选择运行模式。ECB 模式因为相同的明文块总是产生相同的密文,会暴露模式,所以绝对不能使用。目前推荐使用 GCM(Galois/Counter Mode)。GCM 在加密的同时还能验证数据完整性,可以检测密文是否被篡改。

const crypto = require('crypto');

function encrypt(text, key) {
  const iv = crypto.randomBytes(12); // GCM 推荐使用 12 字节 IV
  const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);

  let encrypted = cipher.update(text, 'utf8', 'hex');
  encrypted += cipher.final('hex');

  const authTag = cipher.getAuthTag();

  return {
    iv: iv.toString('hex'),
    encrypted,
    authTag: authTag.toString('hex')
  };
}

RSA:公钥加密的代名词

RSA 是1977年以 MIT 三位教授 Rivest、Shamir、Adleman 名字首字母命名的算法。它基于大数因式分解困难的数学原理。将两个大素数相乘很容易,但从结果中找出原来的两个素数在计算上极其困难。

RSA 最大的优点是解决了密钥分发问题。公钥顾名思义可以公开。如果有人想给你发送加密消息,只需用你的公钥加密后发送即可。因为只有你持有的私钥才能解密。

RSA 还用于数字签名。这时反过来用私钥签名,用公钥验证。因为私钥只有本人持有,有效的签名就证明该消息确实来自那个人。用于验证软件更新包或法律文件的真伪。

但 RSA 很慢。比 AES 慢几百到几千倍,所以不适合直接加密大量数据。因此实际上使用混合方式。

混合加密:集两种优势于一身

现实世界中大多数加密系统同时使用 AES 和 RSA。简化描述通过 HTTPS 访问网站时发生的事情:

首先浏览器连接服务器,服务器发送包含其公钥的证书。浏览器生成随机 AES 密钥(会话密钥),用服务器的 RSA 公钥加密后发送。服务器用自己的私钥解密获得 AES 密钥。现在双方都有了相同的 AES 密钥,之后所有通信都用这个快速的 AES 加密。

这种方式的精妙之处在于同时获得了 RSA 的密钥分发优势和 AES 的速度。RSA 只加密小数据(AES 密钥),所以慢不是问题,实际的大量通信由快速的 AES 负责。

加密实现注意事项

加密算法本身很强大,但错误使用就会失效。必须避免几个常见错误。

不要把密钥硬编码在源代码中。经常能看到上传到 GitHub 的代码中 AWS 密钥暴露而被黑的新闻。密钥应该使用环境变量或 AWS KMS、HashiCorp Vault 等专业密钥管理服务。

AES 的 IV(初始化向量)每次都必须使用新的随机值。用同一个密钥重复使用相同的 IV 可能会破坏加密。IV 不是秘密,可以与密文一起存储。重要的是不要重复使用。

不要试图自己实现加密算法。使用经过验证的库要安全得多。密码学是一个微小错误就可能颠覆整体安全的领域。

总结

加密是现代数字世界的基础。理解 AES 和 RSA 这两种算法的原理,就能自然地理解 HTTPS 如何工作、为什么密码要用哈希存储、什么是数字签名。

使用 Toolypet 的加密工具亲自加密和解密文本。当抽象的概念变成具体的体验时,对安全的理解会更深一层。

EncryptionAESRSACryptographySecurity