2. 加密基础概念:对称加密、非对称加密、哈希算法的原理与对比

咱们做接口测试,尤其是涉及金融、支付、登录这些场景,加密这块是绕不过去的。我当年刚接触时,觉得加密就是“把字符串变乱码”,后来踩了几个坑才明白——加密不是万能的,选错方案比不加密更危险。

这一章,我把三种最常见的加密技术拆开讲:对称加密、非对称加密、哈希算法。你如果能把这三种方案的原理、优缺点、适用场景搞清楚,后面写测试脚本时思路会清晰很多。

2.1 对称加密:又快又简单,但密钥怎么传?

对称加密,说白了就是加密和解密用同一把钥匙。就像你家里装了一把锁,出门时用钥匙锁门,回来用同一把钥匙开门。常见的算法有 AES、DES、3DES(现在基本被AES取代)。

  • 优点:速度快,适合大数据量加密。我用 AES-256 加密过几百 MB 的日志文件,基本不卡顿。
  • 缺点:密钥分发很头疼。你把密钥发给对方,中间被截了,加密等于白做。
个人习惯:做接口测试时,如果系统用的是对称加密,我会先问清楚密钥交换方式。常见的有“密钥通过非对称加密传输”或者“双方预先约定并定期更换”。

举个例子,假设你在测试一个支付接口,请求体需要加密。服务端给你一个固定的 AES 密钥,写在文档里。嗯,这种设计很危险——密钥一旦泄露,所有历史报文都能被解密。我曾经碰到过一个项目,开发把密钥写在了 Android 客户端的 raw 资源文件里,反编译一下就露馅了……从那以后,我只要看到硬编码密钥,都会在测试报告里标红。

2.2 非对称加密:公钥私钥分家,安全但慢

非对称加密有两个钥匙:公钥和私钥。公钥可以公开,私钥必须保密。用公钥加密的数据,只有对应的私钥能解;反过来,私钥加密的数据,所有人都能用公钥验签。主流算法是 RSA(2048 位以上)、ECC(椭圆曲线)。

原理上,它是靠数学难题来保证安全——比如大素数分解。你想想,一个 2048 位的整数,暴力破解需要超算跑上万年,基本不可行。

  • 优点:密钥分发安全,适合身份认证和数字签名。
  • 缺点:性能差,加密 100 字节都要几十毫秒。所以实际中很少直接用非对称加密整个报文,而是用它加密对称密钥。
避坑指南:我曾经接手过一个旧项目,他们用 RSA 加密所有 HTTP 请求体,结果接口响应时间从 50ms 飙升到 5s。最后改成“RSA 交换会话密钥 + AES 加密正文”,性能正常了。记住:非对称加密不是用来加密业务数据的。

2.3 哈希算法:不是加密,是摘要

哈希算法(也叫散列函数)和加密不一样。它不可逆——把任意长度的输入,变成固定长度的输出。比如 MD5(128 位)、SHA-256(256 位)、SHA-3 等。你给它“hello”,它返回一串 64 位的十六进制数;你给它“hello1”,结果完全不同。

哈希的主要用途不是保密,而是完整性校验和密码存储。比如你下载一个大文件,网站提供了 SHA-256 值,你本地算一遍,对比一下就知道文件有没有被篡改。有时候系统存储用户密码时,只存密码的哈希值;登录时再比对哈希,这样即使数据库被拖,也拿不到明文密码。

  • 特点:固定输出、雪崩效应、不可逆。
  • 注意:MD5 和 SHA-1 已被证明不安全,别再用了。我建议至少用 SHA-256 或更高级的。
关键区别:加密可以解密还原原文,哈希无法还原。很多新手把哈希叫“加密”,其实错了。哈希是单向的。

2.4 三种技术对比一览

维度 对称加密 非对称加密 哈希算法
密钥数量 1 个(共享密钥) 2 个(公钥 + 私钥) 无密钥
是否可逆 是 是 否(单向)
典型算法 AES-256, DES RSA-2048, ECC SHA-256, SHA-3
速度 极快(Gbps级别) 很慢(Kbps级别) 较快
主要用途 数据加密传输 密钥交换、数字签名 完整性校验、密码存储
安全依赖 密钥保密 私钥保密 + 数学难题 抗碰撞性
我的选择习惯:做接口测试时,如果报文需要加密,首选对称加密(AES-256-CBC 或 GCM 模式);密钥交换用非对称加密(RSA 或 ECDH);签名校验用 HMAC-SHA256;文件完整性用原哈希值。别混着滥用。

2.5 三者如何协同工作?

实际系统中,这三种技术通常是组合使用的。比如 HTTPS 的握手阶段:
客户端用非对称加密(RSA/ECDHE)协商出一个对称密钥,之后所有数据用 AES 加密。哈希算法则用于消息认证码(HMAC)和证书校验。

下面这张图帮你理清关系(彩色框代表核心概念,箭头表示数据流向):

三种加密技术的协作关系与典型应用 对称加密 (AES) 加密解密用同一密钥 速度快,适合大数据 密钥分发问题 典型:AES-256-CBC 非对称加密 (RSA) 公钥加密,私钥解密 速度慢,用于少量数据 密钥交换 / 数字签名 典型:RSA-2048 哈希算法 (SHA-256) 不可逆,固定输出 完整性校验 密码存储 典型:SHA-256 实际协作模式 ① 用非对称加密交换对称密钥(如 TLS 握手) ② 用对称加密加密业务数据(性能好) ③ 用哈希算法保证数据完整性(防止篡改) 综合应用:HTTPS / 签名 / 加密协议

你看,对称加密负责主要业务数据,非对称加密负责安全传输对称密钥,哈希则负责验证数据有没有被改。三个角色各司其职,缺一不可。

2.6 理解到位,测试才有底气

很多测试用例写不好,是因为对加密的理解停留在“按文档配个密钥”。我建议你在本地装个 OpenSSL 或者用 Python 的 cryptography 库,亲手试一下 AES 加解密、RSA 签名验签、SHA 摘要计算——跑一遍胜过读十遍原理。