Java常见加密算法全解
一、加密算法整体分类(核心基调)
Java 所有加密算法,整体分为三大类,也是行业通用标准分类:
-
不可逆摘要算法(哈希加密):只能加密、不能解密,用于密码存储、数据校验
-
对称加密算法:加密解密同一密钥,速度快、适合大批量数据加密传输
-
非对称加密算法:公钥加密、私钥解密,安全性极高、速度慢,用于签名、密钥交换
所有业务加密场景,全部基于这三类算法组合实现。下面逐个深度拆解+实战代码。
二、不可逆摘要算法(哈希算法)
核心特点:单向加密、不可逆、无解密方法、原文相同则密文永远相同、长度固定。
核心用途:用户密码存储、文件完整性校验、数据防篡改。
2.1 常见算法:MD5、SHA1、SHA256、SHA512
1、MD5 算法
-
密文长度:128位、32位十六进制字符串
-
优点:速度极快、算法简单、兼容性最强
-
缺点:安全性低、可暴力破解、存在碰撞概率
-
生产现状:禁止单独使用,必须加盐使用
2、SHA 系列算法
-
SHA1:160位密文,安全性一般,目前已被破解,逐步淘汰
-
SHA256:256位密文,安全性高、行业主流
-
SHA512:512位密文,安全性最高、抗破解能力极强
2.2 为什么明文密码必须「加盐加密」?
单纯 MD5/SHA256 存在彩虹表暴力破解,大量常用密码的密文已经被公开收录,直接查表即可破解。
加盐原理:原文 + 随机盐值 再做哈希,即使密码简单,密文也完全不重复,杜绝彩虹表破解。
2.3 Java 实战代码:MD5/SHA256 加盐加密
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.UUID;
/**
* 哈希摘要加密工具类(不可逆)
* MD5 / SHA256 / 加盐加密
*/
public class HashEncryptUtil {
// 生成随机盐值
public static String getSalt() {
return UUID.randomUUID().toString().replace("-", "").substring(0, 16);
}
// MD5 加盐加密
public static String md5Encrypt(String content, String salt) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] bytes = md5.digest((content + salt).getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
} catch (Exception e) {
throw new RuntimeException("MD5加密失败", e);
}
}
// SHA256 加盐加密
public static String sha256Encrypt(String content, String salt) {
try {
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
byte[] bytes = sha256.digest((content + salt).getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
} catch (Exception e) {
throw new RuntimeException("SHA256加密失败", e);
}
}
// 测试
public static void main(String[] args) {
String pwd = "123456";
String salt = getSalt();
System.out.println("随机盐值:" + salt);
System.out.println("MD5加盐密文:" + md5Encrypt(pwd, salt));
System.out.println("SHA256加盐密文:" + sha256Encrypt(pwd, salt));
}
}
2.4 生产使用场景
-
用户登录密码存储(数据库存储密文+盐值)
-
文件上传校验、防止文件篡改
-
接口参数一致性校验
三、对称加密算法(可解密、速度快)
核心定义:加密和解密使用同一个密钥,加密可逆、效率极高、适合大量数据加密。
3.1 常见对称算法:DES、3DES、AES
1、DES
早期经典算法,密钥长度短、安全性低,现已彻底淘汰,生产禁止使用。
2、3DES
三重DES加密,安全性提升,但速度慢、性能差,目前逐步被AES替代。
3、AES(生产主流首选)
-
密钥长度:128/192/256位
-
优点:加密强度高、速度快、资源占用低、无破解漏洞
-
行业标准:目前对称加密绝对主流
3.2 对称加密优缺点
优点:加密解密速度极快、适合大文本、文件、接口报文加密
缺点:密钥传输存在风险,一旦密钥泄露,所有数据明文泄露
3.3 Java 实战 AES 加密解密工具类
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
/**
* AES 对称加密工具类
* 加密解密同一密钥
*/
public class AesEncryptUtil {
// 密钥必须16位(AES128)、24位(AES192)、32位(AES256)
private static final String SECRET_KEY = "1234567890abcdef";
private static final String ALGORITHM = "AES";
// AES 加密
public static String encrypt(String content) {
try {
SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY.getBytes(StandardCharsets.UTF_8), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encryptBytes = cipher.doFinal(content.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encryptBytes);
} catch (Exception e) {
throw new RuntimeException("AES加密失败", e);
}
}
// AES 解密
public static String decrypt(String encryptStr) {
try {
SecretKeySpec keySpec = new SecretKeySpec(SECRET_KEY.getBytes(StandardCharsets.UTF_8), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decryptBytes = cipher.doFinal(Base64.getDecoder().decode(encryptStr));
return new String(decryptBytes, StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException("AES解密失败", e);
}
}
public static void main(String[] args) {
String content = "Java加密算法实战";
String encrypt = encrypt(content);
String decrypt = decrypt(encrypt);
System.out.println("AES密文:" + encrypt);
System.out.println("AES解密:" + decrypt);
}
}
3.4 适用场景
-
接口传输报文加密
-
手机号、身份证、银行卡隐私数据存储加密
-
配置文件敏感信息加密
四、非对称加密算法(高安全、可签名)
核心定义:拥有两把密钥 公钥、私钥。公钥公开、私钥私有。
加密规则:公钥加密、私钥解密;私钥签名、公钥验签
4.1 常见算法:RSA、DSA、ECC
1、RSA(最经典、最常用)
-
支持加密、解密、签名、验签
-
安全性极高、行业通用标准
-
缺点:运算速度慢、不适合大批量数据加密
2、DSA
仅支持签名验签,不支持加密解密,使用场景单一。
3、ECC
椭圆曲线加密,同等安全强度密钥更短、速度更快,移动端、区块链常用。
4.2 非对称加密优缺点
优点:安全性天花板,公钥公开无需保密,私钥不对外泄露,杜绝密钥传输风险
缺点:加密速度极慢、性能差,只适合小数据加密、密钥交换、签名校验
4.3 RSA 核心使用场景
-
支付接口、第三方对接签名验签(微信、支付宝)
-
AES密钥安全传输(RSA加密AES密钥)
-
身份认证、防篡改、防抵赖
五、三大类算法核心对比
|
算法类型 |
是否可逆 |
密钥特点 |
速度 |
安全性 |
典型场景 |
|---|---|---|---|---|---|
|
摘要算法(MD5/SHA256) |
不可逆 |
无密钥/加盐 |
极快 |
中(需加盐) |
密码存储、数据校验 |
|
对称加密(AES) |
可逆 |
单密钥 |
快 |
高 |
数据加密、报文传输 |
|
非对称加密(RSA) |
可逆 |
公私钥成对 |
慢 |
极高 |
签名、密钥交换 |
六、生产级最佳加密方案(组合加密)
单独任意一种算法都有短板,企业生产主流采用 RSA+AES 组合加密,兼顾安全与性能:
-
使用 AES 对称加密 对业务大数据、接口报文加密(速度快)
-
使用 RSA 非对称加密 对 AES 密钥加密传输(安全不泄露)
-
使用 SHA256加盐 存储用户密码
这也是目前支付、金融、政务系统的标准加密架构。
更多推荐



所有评论(0)