2. 加密基础概念:对称加密、非对称加密、哈希算法的原理与对比
咱们做接口测试,尤其是涉及金融、支付、登录这些场景,加密这块是绕不过去的。我当年刚接触时,觉得加密就是“把字符串变乱码”,后来踩了几个坑才明白——加密不是万能的,选错方案比不加密更危险。
这一章,我把三种最常见的加密技术拆开讲:对称加密、非对称加密、哈希算法。你如果能把这三种方案的原理、优缺点、适用场景搞清楚,后面写测试脚本时思路会清晰很多。
2.1 对称加密:又快又简单,但密钥怎么传?
对称加密,说白了就是加密和解密用同一把钥匙。就像你家里装了一把锁,出门时用钥匙锁门,回来用同一把钥匙开门。常见的算法有 AES、DES、3DES(现在基本被AES取代)。
- 优点:速度快,适合大数据量加密。我用 AES-256 加密过几百 MB 的日志文件,基本不卡顿。
- 缺点:密钥分发很头疼。你把密钥发给对方,中间被截了,加密等于白做。
举个例子,假设你在测试一个支付接口,请求体需要加密。服务端给你一个固定的 AES 密钥,写在文档里。嗯,这种设计很危险——密钥一旦泄露,所有历史报文都能被解密。我曾经碰到过一个项目,开发把密钥写在了 Android 客户端的 raw 资源文件里,反编译一下就露馅了……从那以后,我只要看到硬编码密钥,都会在测试报告里标红。
2.2 非对称加密:公钥私钥分家,安全但慢
非对称加密有两个钥匙:公钥和私钥。公钥可以公开,私钥必须保密。用公钥加密的数据,只有对应的私钥能解;反过来,私钥加密的数据,所有人都能用公钥验签。主流算法是 RSA(2048 位以上)、ECC(椭圆曲线)。
原理上,它是靠数学难题来保证安全——比如大素数分解。你想想,一个 2048 位的整数,暴力破解需要超算跑上万年,基本不可行。
- 优点:密钥分发安全,适合身份认证和数字签名。
- 缺点:性能差,加密 100 字节都要几十毫秒。所以实际中很少直接用非对称加密整个报文,而是用它加密对称密钥。
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级别) | 较快 |
| 主要用途 | 数据加密传输 | 密钥交换、数字签名 | 完整性校验、密码存储 |
| 安全依赖 | 密钥保密 | 私钥保密 + 数学难题 | 抗碰撞性 |
2.5 三者如何协同工作?
实际系统中,这三种技术通常是组合使用的。比如 HTTPS 的握手阶段:
客户端用非对称加密(RSA/ECDHE)协商出一个对称密钥,之后所有数据用 AES 加密。哈希算法则用于消息认证码(HMAC)和证书校验。
下面这张图帮你理清关系(彩色框代表核心概念,箭头表示数据流向):
你看,对称加密负责主要业务数据,非对称加密负责安全传输对称密钥,哈希则负责验证数据有没有被改。三个角色各司其职,缺一不可。
2.6 理解到位,测试才有底气
很多测试用例写不好,是因为对加密的理解停留在“按文档配个密钥”。我建议你在本地装个 OpenSSL 或者用 Python 的 cryptography 库,亲手试一下 AES 加解密、RSA 签名验签、SHA 摘要计算——跑一遍胜过读十遍原理。