加密分类的介绍
| 类别 | 是否可还原原文 | 优点 | 缺点 | 典型场景 |
|---|---|---|---|---|
| 对称加密 | ✅ 可解密还原原文 | 加解密速度快;算法简单;占用资源少 | 需要安全地共享密钥;密钥泄露风险 | 数据库加密、配置文件加密、内部文件传输 |
| 非对称加密 | ✅ 可解密还原原文 | 无需提前共享密钥(公钥可公开);可配合签名机制保证完整性 | 加解密速度慢;计算资源消耗高 | 安全密钥交换、数字签名、敏感通信 |
| 摘要加密 | ❌ 不可解密,无法还原原文 | 不需管理密钥(除 HMAC 外);适合完整性校验;计算快 | 无法还原原文;安全级别取决于算法强度(MD5/SHA-1已不安全) | 文件校验、密码存储、消息完整性验证 |
- 对称加密推荐 AES,安全性和速度较优;DES只在需要兼容旧系统时用。
- 非对称加密推荐 RSA(加密 & 签名),如果只是签名可选 DSA。
- 摘要加密中,安全场景不要用 MD5/SHA-1,优先 SHA-256 或基于密钥的 HMAC。
对称加密(Symmetric)
AES(推荐)
- 用途:安全性高,适合保护本地或传输数据
- 场景:数据库加密、配置文件加密
import cn.hutool.crypto.symmetric.AES;
byte[] key = "1234567890123456".getBytes();
AES aes = new AES(key);
String encrypt = aes.encryptHex("Hello Hutool AES");
String decrypt = aes.decryptStr(encrypt);
DES(兼容)
- 用途:只在旧系统兼容需要时使用
- 场景:老硬件系统通信加密
import cn.hutool.crypto.symmetric.DES;
byte[] key = "12345678".getBytes();
DES des = new DES(key);
String enc = des.encryptHex("Hello DES");
String dec = des.decryptStr(enc);
非对称加密(Asymmetric)
RSA
- 用途:在不安全网络中加密传输小数据 & 私钥签名
- 场景:API 调用签名、敏感配置初始化
- 非对称加密会生成成对的密钥:
- 公钥:可以公开给其他人,用于加密数据或验证签名
- 私钥:必须保密,仅自己持有,用于解密数据或生成签名
- 数据流:
- 加密场景:对方用你的公钥加密 → 你用私钥解密
- 签名场景:你用私钥签名 → 对方用你的公钥验证签名
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
RSA rsa = new RSA();
String encB64 = rsa.encryptBase64("Hello RSA", KeyType.PublicKey);
String decStr = rsa.decryptStr(encB64, KeyType.PrivateKey);
DSA
- 用途:只做签名/验签,不加密数据
- 场景:版本发布校验、电子文档签署
import cn.hutool.crypto.asymmetric.DSA;
DSA dsa = new DSA();
byte[] sig = dsa.sign("Hello DSA".getBytes());
boolean verify = dsa.verify("Hello DSA".getBytes(), sig);
摘要加密(Digest)
MD5(低安全,可用于非安全场景)
import cn.hutool.crypto.digest.DigestUtil;
String md5Hex = DigestUtil.md5Hex("Hello MD5");
SHA-1(中等安全)
String sha1Hex = DigestUtil.sha1Hex("Hello SHA-1");
SHA-256(高安全,推荐)
String sha256Hex = DigestUtil.sha256Hex("Hello SHA-256");
HMAC(带密钥的摘要)
import cn.hutool.crypto.digest.HmacAlgorithm;
import cn.hutool.crypto.digest.HMac;
HMac mac = new HMac(HmacAlgorithm.HmacSHA256, "secret_key".getBytes());
String hmacHex = mac.digestHex("Hello HMAC");
📌 使用建议
如果仅需校验且安全性要求高 → 选 SHA-256 或 HMAC
如果性能是重点 → 选 AES
如果安全传输 & 无密钥交换通道 → 选 RSA
如果只需签名 → 选 DSA 或 RSA的签名功能
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
免责声明: 本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
免责声明: 本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。

评论(0)