工作中最常用的7种加密算法!
前言
最近缺项目经历想快速提升项目实战能力(包含多个AI项目),或者最近找工作,或者想学习AI的小伙伴,可以看看下面👇🏻的这个链接(或许真的能够帮到你)。
几年之前,某公司的数据库没有做加密,被黑客直接脱库了。
导致百万用户数据泄露,包含:账号、密码、手机号等。
下面是错误案例:
@PostMapping("/register")
public void register(@RequestParam String password) {
userDao.save(new User(password));
}直接名为存储了用户密码。
攻击分析:
- 未使用任何加密算法
- 未加盐处理
- 缺乏敏感数据保护机制
这个事情让我深刻意识到:加密是系统安全的最后一道防线。
这篇文章跟大家一起聊聊,工作中最常用的7种加密算法,希望对你会有所帮助。
1 哈希三剑客
1.1 MD5
MD5是一种哈希算法。
原理剖析:
MD5能将任意长度数据转换为128位(16字节)的哈希值。
它的核心是四轮非线性函数处理,每轮对数据块进行16次位运算。
但因其碰撞漏洞(不同数据生成相同哈希值),已不再安全。
Java实现方案:
public static String md5WithSalt(String password) {
String salt = UUID.randomUUID().toString().substring(0,8);
return DigestUtils.md5Hex(password + salt); // 加盐处理
}目前攻击者可以通过以下三种方式破解MD5:
- 彩虹表攻击:45%
- 碰撞攻击:30%
- 暴力破解:25%
虽然MD5已不推荐单独使用,但加盐后仍可作为基础防护层。
1.2 SHA系列 —— 哈希新标准
SHA算法是哈希新标准。
原理:
SHA算法家族通过多轮位运算和模运算生成哈希值。
以SHA-256为例:
- 数据填充至512位倍数
- 初始化8个32位哈希初值
- 64轮位运算(与、或、异或、循环移位)
- 最终拼接成256位哈希值
Java代码实现:
public static String sha256(String input) {
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
return Hex.encodeHexString(hash); // 十六进制转换
}性能对比:
| 算法 | 输出长度 | 碰撞抵抗 | 适用场景 |
|---|---|---|---|
| SHA-1 | 160bit | 已破解 | 遗留系统兼容 |
| SHA-256 | 256bit | 安全 | 数字证书 |
| SHA-3 | 可变 | 量子安全 | 金融系统 |
1.3 HMAC
HMAC是带密钥的哈希。
原理揭秘:
HMAC = Hash + MAC,通过密钥增强哈希安全性。其公式为:HMAC(K, m) = H((K ⊕ opad) || H((K ⊕ ipad) || m))
其中opad和ipad是固定填充值,确保即使密钥泄露也难以伪造签名。
Java实现:
public static String hmacSha256(String key, String data) {
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(key.getBytes(), "HmacSHA256"));
return Base64.getEncoder().encodeToString(mac.doFinal(data.getBytes()));
}HMAC算法生成哈希之前,需要输入一个秘钥key。
验证流程:

2 对称加密双雄
在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
最近缺项目经历想快速提升项目实战能力(包含多个AI项目),或者最近找工作,或者想学习AI的小伙伴,可以看看下面👇🏻的这个链接(或许真的能够帮到你)。
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。
2.1 AES
AES是新时代的王者。
原理详解:
AES采用SPN(替换-置换网络)结构:
- 密钥扩展:生成多轮子密钥
- 初始轮密钥加
- 10轮处理(字节替换、行移位、列混淆、轮密钥加)
- 最终轮省略列混淆
Java代码示例:
// AES-GCM模式示例
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec spec = new GCMParameterSpec(128, iv);
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES"), spec);2.2 DES/3DES
算法原理:

每轮处理步骤:
- 将数据分为左右32位
- 右半部分通过F函数处理
- 与左半部分异或
- 左右交换位置
Java代码示例:
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
SecretKey key = new SecretKeySpec(keyBytes, "DESede");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cipherText = cipher.doFinal(plainText.getBytes());这里使用了3DES加密。
3 非对称加密双壁
3.1 RSA
RSA是互联网基石。
数学原理:
基于大数分解难题:
- 选择大素数p、q
- 计算n = p*q
- 计算φ(n) = (p-1)(q-1)
- 选择e使得1 < e < φ(n)且互质
- 计算d ≡ e⁻¹ mod φ(n)
公钥=(n,e),私钥=(n,d)
密钥生成:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048); // 推荐2048位
KeyPair pair = keyGen.generateKeyPair();3.2 DSA
DSA是签名专家。
签名流程:

Java实现:
// 签名
Signature dsa = Signature.getInstance("SHA256withDSA");
dsa.initSign(privateKey);
dsa.update(data);
byte[] signature = dsa.sign();总结
加密算法选择:

安全实践清单:
- 密码存储必须加盐哈希
- HTTPS必须使用TLS1.3+AES_256_GCM
- RSA密钥长度不低于2048位
- 定期更换HMAC签名密钥
三条黄金法则:
- 纵深防御:组合使用多种加密算法
- 密钥为王:比算法选择更重要
- 持续演进:跟踪量子计算发展
安全工具包:
- Keycloak密钥管理
- Bouncy Castle扩展
- OWASP加密指南
(看着监控大屏上平稳的加密成功率曲线,我知道今夜可以安心入眠了...)
最近缺项目经历想快速提升项目实战能力(包含多个AI项目),或者最近找工作,或者想学习AI的小伙伴,可以看看下面👇🏻的这个链接(或许真的能够帮到你)。