加密分类的介绍

类别是否可还原原文优点缺点典型场景
对称加密✅ 可解密还原原文加解密速度快;算法简单;占用资源少需要安全地共享密钥;密钥泄露风险数据库加密、配置文件加密、内部文件传输
非对称加密✅ 可解密还原原文无需提前共享密钥(公钥可公开);可配合签名机制保证完整性加解密速度慢;计算资源消耗高安全密钥交换、数字签名、敏感通信
摘要加密❌ 不可解密,无法还原原文不需管理密钥(除 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 调用签名、敏感配置初始化
  • 非对称加密会生成成对的密钥:
    • 公钥:可以公开给其他人,用于加密数据或验证签名
    • 私钥:必须保密,仅自己持有,用于解密数据或生成签名
  • 数据流:
    1. 加密场景对方用你的公钥加密 → 你用私钥解密
    2. 签名场景:你用私钥签名 → 对方用你的公钥验证签名
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博客搜索:标题关键字。以获取最新全部资料 ❤

免责声明:
本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。