1、加密基础回顾:对称加密与非对称加密的区别,常见算法(AES、RSA、SM4)的适用场景

聊字段级加密性能优化之前,咱们先把地基夯实一下。加密这事儿,说到底就两类:对称加密和非对称加密。很多新人容易搞混,其实分清它俩的关键就一句话——加密和解密用的是不是同一把钥匙。

对称加密:又快又简单,但钥匙怎么给?

对称加密,说白了就是你和对方共用一把钥匙。你用这把锁把数据锁上,对方用同一把锁打开。性能极高,特别适合大量数据的加密。

我自己做性能优化时,80% 的场景最后都落在了对称加密上。为什么?一个字:快。它的加解密速度比非对称快几个数量级,在 CPU 密集型任务里这差距是决定性的。

核心特点:

  • 加密/解密使用相同密钥
  • 算法简单,计算开销小
  • 需要安全的密钥传输通道
  • 密钥数量随通信方数指数增长

AES:目前最主流的对称算法

AES(Advanced Encryption Standard)是 NIST 标准,也是我项目里用得最多的。它支持 128、192、256 位密钥,目前公认 128 位就足够安全了。你想想看,破解 128 位 AES 需要的力量,地球上暂时没人能凑出来。

适用场景:

  • 数据库字段级加密(我们在做的核心场景)
  • 文件加密
  • 传输层加密(TLS 内部也在用)
  • 任何对性能和安全性都有要求的场景

SM4:国产商用密码算法

SM4 是国家密码管理局发布的对称算法,128 位分组,128 位密钥。我印象很深,几年前有个金融项目,客户指定必须用国密算法。当时找资料找得头疼,但踩完坑之后发现它和 AES 在性能上差距并不大,安全强度也够。

我的建议:

公司在国内做业务,尤其涉及政府、金融、运营商,直接上 SM4 省心。别等到等保测评的时候再返工,那个成本你扛不住。

非对称加密:安全有保障,性能是短板

非对称加密,加密用公钥,解密用私钥。公钥可以公开,私钥必须保密。这样一来,钥匙分发的问题就解决了——对方直接用你的公钥加密数据,只有你能解开。

但是,代价也很大。非对称加密的性能只有对称加密的几百分之一甚至上千分之一。为什么会这样?因为它背后是大数运算,动不动就是几百位的素数因子分解,CPU 算起来很吃力。

注意:

不要拿 RSA 去加密大块数据,会出人命的。实际项目中,非对称加密只用在小数据块上,比如加密对称密钥本身。

RSA:老牌选手,但别乱用

RSA 是目前最广泛使用的非对称算法,基于大整数因子分解的数学困难问题。密钥长度通常建议 2048 位以上,1024 位已经不安全了。

适用场景:

  • 数字签名
  • 密钥协商与传输
  • 身份认证
  • 小数据块加密(如支付密码、密钥本身)

我曾经在一个支付系统里,看到有人用 RSA 直接加密 JSON 报文,结果请求耗时从 50ms 飙升到了 3 秒。后来改成对称加密 + 密钥由 RSA 保护的混合方案,耗时降到了 60ms 以内。嗯,这就是典型的非对称用的不是地方。

特性 对称加密(AES/SM4) 非对称加密(RSA)
密钥 加解密使用相同密钥 公钥加密、私钥解密
速度 极快,硬件加速友好 慢,约 1/100 到 1/1000
密钥管理 难,多方的密钥数量爆炸 容易,公钥随便发
安全基础 混乱与扩散 数学困难问题
加密块大小 固定块(128/256位) 受密钥长度限制(2048位≈256字节)
适用数据量 任意大小 仅适合小数据

混合加密:实战中的标准解法

实际工程里,很少有人只用一种加密方式。绝大多数安全协议(如 TLS/SSL、HTTPS)都采用混合加密。

工作流程是这样的:

  1. 客户端用 RSA 公钥加密一个临时生成的 AES 密钥
  2. 服务端用 RSA 私钥解密得到 AES 密钥
  3. 后续大数据通信全部用 AES 加密

这样既解决了密钥分发问题,又保证了性能。我建议你在字段级加密里也采用这个思路——字段内容用对称算法加密,对称密钥用非对称算法保护。

避坑指南:

我曾经在一个项目中犯过这个错误:直接用 RSA 加密 10KB 的 JSON 负载,导致接口超时。后来改成 AES 加密负载 + RSA 加密 AES 密钥的组合方案,性能问题立刻解决了。

知识体系概览

下面这张图总结了三种算法在字段级加密中的位置和关系,你看看就明白了。

字段级加密核心算法体系 对称加密 AES-128/256 SM4-128 加密数据字段 性能优先 非对称加密 RSA-2048/4096 SM2-256 加密对称密钥 安全优先 混合加密(实战方案) 对称加密数据 + 非对称加密密钥 = 性能与安全兼顾

怎么选?我自己的判断标准

做了这么多年加密相关项目,我总结了一个简单的筛选逻辑,你拿过去直接用:

  • 如果只是内部系统加密数据库字段——用 SM4 或 AES-256 就够了,没必要上非对称
  • 如果涉及跨系统、跨组织的密钥分发——必须上 RSA/SM2 保密钥传输安全
  • 如果既要传输安全又要高性能——混合加密没商量,字段内容用对称,密钥用非对称
  • 如果客户明确要求国密合规——SM4 + SM2,别掺 RSA,等保专家会找你喝茶的

小结一下

回顾这三种算法,你会发现其实根本不存在"最好"的加密方式。对称加密性能好但密钥管理难,非对称加密安全但太慢,混合加密是两者妥协的结果。