加密算法分析
# 加密算法分析
# 对称加密、非对称加密、摘要算法有哪些?
对称加密传内容,非对称传密钥,摘要算法保完整性。
- AES 快、RSA 安、SHA256 稳。
- 常用组合:
SHA256 摘要 + RSA 签名
、HTTPS = RSA + AES + SHA256
# 分类与用途总览
类型 | 代表算法 | 用途示例 |
---|---|---|
✅ 对称加密 | AES、DES、3DES、SM4、XXTEA | 数据加密传输、本地数据加密 |
✅ 非对称加密 | RSA、ECC、DSA、SM2 | 登录鉴权、数字签名、密钥交换 |
✅ 摘要算法 | MD5、SHA1、SHA256、SM3 | 数据完整性校验、签名、密码存储 |
# 对称加密(Symmetric Encryption)
特点
- 加密 & 解密使用 同一个密钥
- 加解密速度快
- 密钥分发是最大问题(必须安全传输密钥)
常见算法
算法 | 简介 |
---|---|
AES | 现代最常用,安全性高,推荐使用 |
DES | 老旧,已不安全,不推荐 |
3DES | DES 的升级版,更安全但较慢 |
SM4 | 中国国家密码算法(国密) |
XXTEA | 轻量级加密,适合嵌入式设备 |
用途举例
- HTTPS 中对称加密用于加密通信内容(协商密钥后)
- 本地配置加密、数据库字段加密、App本地数据加密
# 非对称加密(Asymmetric Encryption)
特点
- 使用一对密钥:公钥(加密)、私钥(解密)
- 加密/解密速度慢
- 可用于:加密、签名、身份验证
常见算法
算法 | 简介 |
---|---|
RSA | 最常用非对称算法,安全性好,应用广泛 |
ECC | 更短密钥同样安全,适合移动端 |
DSA | 数字签名算法 |
SM2 | 中国国家密码算法(国密) |
用途举例
- 登录验证(RSA 加密登录信息)
- 数字签名(防篡改、身份确认)
- 密钥协商(用来传递对称加密的密钥)
# 摘要算法(Hash / Digest)
特点
- 不可逆运算:从结果无法还原原文
- 用于校验数据完整性
- 输出为定长字符串(如 SHA256 输出 256 bit)
常见算法
算法 | 简介 |
---|---|
MD5 | 128bit,快,但已被破解(不安全) |
SHA1 | 160bit,已不安全 |
SHA256 | 256bit,安全,推荐使用 |
SHA3 | 新一代 SHA 系列 |
SM3 | 国密摘要算法,类似 SHA256 |
用途举例
- 密码加盐+摘要存储:
password -> salt -> SHA256
- 文件校验(如上传后 MD5 校验)
- 数字签名(摘要 + 私钥签名)
# 三者核心区别对比表
特性 | 对称加密 | 非对称加密 | 摘要算法 |
---|---|---|---|
密钥数量 | 1(对称密钥) | 2(公钥+私钥) | 无密钥 |
是否可逆 | ✅ 是 | ✅ 是 | ❌ 不可逆 |
速度 | ⚡ 非常快 | 🐢 较慢 | ⚡ 非常快 |
用途 | 数据加解密 | 密钥协商、签名 | 完整性校验、签名 |
安全性 | 依赖密钥安全 | 依赖数学难题 | 防篡改,无法反推原文 |
# RSA vs AES
RSA 和 AES 是两种常用但原理、用途截然不同的加密算法,一个用于“非对称加密”,一个用于“对称加密”,在实际项目中经常配合使用。
# AES 加密(对称加密)
原理:
- 加密和解密使用相同的密钥(对称密钥);
- 加密速度快,适合处理大量数据。
特点:
特点 | 说明 |
---|---|
加解密速度快 | 适合大数据量加密,例如文件、图片、音视频 |
密钥分发是难点 | 加密和解密用的是同一个密钥,必须安全传输 |
# RSA 加密(非对称加密)
原理:
- 使用一对密钥:公钥和私钥。
- 用公钥加密,私钥解密(或反过来做签名校验);
- 公钥可以公开,但私钥必须保密。
特点:
特点 | 说明 |
---|---|
加解密速度慢 | 不适合加密大数据 |
解决密钥分发问题 | 公钥可以公开,私钥留在自己手里 |
# 实际场景中怎么选?
常见组合:RSA + AES 混合加密
这是我们在 HTTPS / 文件传输 / 登录系统 中常见的模式:
- 服务端生成一个随机的 AES 密钥;
- 用客户端的 RSA 公钥加密 AES 密钥;
- 客户端用自己的 RSA 私钥解密得到 AES 密钥;
- 双方后续通过 AES 对称加密传输数据;
# 总结
场景 | 使用方案 | 原因说明 |
---|---|---|
大量数据传输(如视频) | AES | 快速高效,对称加密适合大数据 |
密钥交换、身份验证 | RSA | 解决密钥分发,提供签名功能 |
综合应用(如 HTTPS) | RSA + AES 混合加密 | 结合两者优点:RSA 传密钥,AES 传数据 |
# 举例说明
- HTTPS:客户端通过 RSA 获取服务端的 AES 密钥,后续数据用 AES 加密;
- JWT 签名:RSA 私钥签名,公钥验证(确保来源可信);
- 支付接口加密:请求体用 AES 加密,AES 密钥用 RSA 加密;
# RSA 和 AES 加密效率差异
算法 | 加密速度 | 数据大小限制 | 密钥管理 |
---|---|---|---|
AES | 非常快 | 不限 | 难管理(要安全传输) |
RSA | 慢 | 限制(比如2048位密钥只能加密245字节) | 易于管理(公钥可公开) |
# XXTEA 加密算法
XXTEA 是一种轻量级、对称加密算法,全称为 Corrected Block TEA(Tiny Encryption Algorithm),它是 TEA 算法的改进版,专为小块数据加密设计,尤其适用于嵌入式设备或资源受限的场景。
# XXTEA 简介
类型:
- 对称加密(加密和解密使用相同密钥)
特点:
特性 | 说明 |
---|---|
轻量级 | 算法简单,代码量小(适合嵌入式、前端) |
对称加密 | 加解密使用相同密钥 |
定长分组 | 输入被分割成固定大小的块(32bit/块) |
支持变长数据 | 相比 TEA 修复了加密长度限制问题 |
不可逆性强 | 安全性高于 TEA,但仍低于 AES |
# XXTEA 加密流程简要描述
- 将待加密数据按 32 位分组,组成整数数组;
- 使用固定的轮次进行整数之间的位运算(移位、加减、异或);
- 解密过程则反向执行相同轮次的操作;
- 密钥是 128 位(16 字节),可看作是 4 个 32 位整数。
# 应用场景
场景 | 说明 |
---|---|
前端加密通信 | 小程序 / JS 中使用,便于前端加密参数 |
嵌入式设备 | 资源有限不适合用 AES 的场景 |
客户端签名 | 对传输数据加密,防止伪造和篡改 |
# 与 AES、TEA 对比
算法 | 加密类型 | 安全性 | 资源消耗 | 备注 |
---|---|---|---|---|
AES | 对称加密 | 非常高 | 较高 | 行业标准 |
TEA | 对称加密 | 已发现弱点 | 非常低 | 轻量但不推荐 |
XXTEA | 对称加密 | 优于 TEA | 非常低 | 安全性在 AES 之下,适合轻量场景;加解密速度非常快 |
# 使用方式(加密解密)
String key = "1234567890abcdef"; // 16 字节密钥
String data = "Hello, XXTEA!";
// 加密
byte[] encryptData = XXTEA.encrypt(data.getBytes(StandardCharsets.UTF_8), key.getBytes());
String base64Encrypted = Base64.getEncoder().encodeToString(encryptData);
// 解密
byte[] decryptData = XXTEA.decrypt(Base64.getDecoder().decode(base64Encrypted), key.getBytes());
String result = new String(decryptData, StandardCharsets.UTF_8);
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 总结
- XXTEA 是轻量级、对称加密算法,主要优势是小巧、易于嵌入,适合 前端加密、嵌入式通信、小游戏、小程序中保护参数。
- 如果对安全性要求非常高,建议优先考虑 AES + HTTPS 或非对称加密方案。
# 不可逆算法
不可逆算法(Irreversible Algorithm),通常指无法通过 输出 推导出 输入的算法,常见于加密和安全领域,最典型的就是 哈希函数(Hash Function)。
# 定义
不可逆算法的核心特点是:
- 不可逆:从输出值无法还原出原始输入;
- 确定性:相同输入始终输出相同结果;
- 抗碰撞:不同输入不应产生相同输出(哈希冲突概率极低);
- 雪崩效应:输入的微小变化导致输出完全不同。
# 常见不可逆算法(哈希函数)
- MD5(Message Digest 5)
- 输出长度:128 位(16 字节)
- 优点:计算快,广泛使用;
- 缺点:已被破解,不适合安全场景(存在碰撞攻击);
- 应用场景:文件校验、数据库唯一标识。
- SHA 系列(Secure Hash Algorithm)
- SHA-1:输出 160 位(20 字节),比 MD5 稍安全,但也被逐步淘汰,已被破解;
- SHA-256/SHA-512:输出 256/512 位,目前安全性更高;
- 应用场景:密码存储、区块链、签名验证等。
- bcrypt
- 加盐哈希算法(加入随机 salt 提升安全);
- 适合密码加密存储;
- 内部使用 Blowfish 加密算法;
- 支持自定义迭代轮数,计算成本高,抵抗暴力破解。
- scrypt / Argon2
- 现代密码哈希算法,加入内存消耗限制;
- Argon2 是密码学比赛冠军,现代系统中推荐使用。
# 常见用途
场景 | 不可逆算法的作用 |
---|---|
密码加密 | 存储用户密码的哈希值,避免明文泄露 |
数据签名 | 数字签名中先做摘要,再签名(比如密钥) |
文件校验 | 验证文件完整性(如 MD5 校验码) |
区块链 | 区块 Hash 确保链条安全、不可篡改 |
防篡改 | 验证数据是否被更改(如日志签名) |
# 不可逆 ≠ 不可验证
虽然算法不可逆,但可通过“比对哈希值”来验证输入是否一致。例如密码验证流程:
- 不需要解密原始密码,提升安全性。
用户输入密码 -> 哈希加密 -> 与数据库中加密后的密码比对
1
# 常见误区
误区 | 正解 |
---|---|
不可逆 = 安全 | 不是,像 MD5、SHA-1 已被破解 |
不可逆无法验证 | 可以通过哈希比对验证 |
不可逆不能被暴力破解 | 如果不加 salt 或计算慢,仍可被彩虹表攻击 |
# 总结
不可逆算法通常是指哈希函数,如 MD5、SHA-256、bcrypt 等,广泛用于密码存储、签名验证、数据完整性校验等场景。
其核心特性是不可逆、抗碰撞、雪崩效应,适合保证数据不可被还原但可验证的需求。
上次更新: 2025/7/16 17:38:04