Java常见加密算法全解
一、加密算法整体分类核心基调Java 所有加密算法整体分为三大类也是行业通用标准分类不可逆摘要算法哈希加密只能加密、不能解密用于密码存储、数据校验对称加密算法加密解密同一密钥速度快、适合大批量数据加密传输非对称加密算法公钥加密、私钥解密安全性极高、速度慢用于签名、密钥交换所有业务加密场景全部基于这三类算法组合实现。下面逐个深度拆解实战代码。二、不可逆摘要算法哈希算法核心特点单向加密、不可逆、无解密方法、原文相同则密文永远相同、长度固定。核心用途用户密码存储、文件完整性校验、数据防篡改。2.1 常见算法MD5、SHA1、SHA256、SHA5121、MD5 算法密文长度128位、32位十六进制字符串优点速度极快、算法简单、兼容性最强缺点安全性低、可暴力破解、存在碰撞概率生产现状禁止单独使用必须加盐使用2、SHA 系列算法SHA1160位密文安全性一般目前已被破解逐步淘汰SHA256256位密文安全性高、行业主流SHA512512位密文安全性最高、抗破解能力极强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、AES1、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、ECC1、RSA最经典、最常用支持加密、解密、签名、验签安全性极高、行业通用标准缺点运算速度慢、不适合大批量数据加密2、DSA仅支持签名验签不支持加密解密使用场景单一。3、ECC椭圆曲线加密同等安全强度密钥更短、速度更快移动端、区块链常用。4.2 非对称加密优缺点优点安全性天花板公钥公开无需保密私钥不对外泄露杜绝密钥传输风险缺点加密速度极慢、性能差只适合小数据加密、密钥交换、签名校验4.3 RSA 核心使用场景支付接口、第三方对接签名验签微信、支付宝AES密钥安全传输RSA加密AES密钥身份认证、防篡改、防抵赖五、三大类算法核心对比算法类型是否可逆密钥特点速度安全性典型场景摘要算法(MD5/SHA256)不可逆无密钥/加盐极快中需加盐密码存储、数据校验对称加密(AES)可逆单密钥快高数据加密、报文传输非对称加密(RSA)可逆公私钥成对慢极高签名、密钥交换六、生产级最佳加密方案组合加密单独任意一种算法都有短板企业生产主流采用RSAAES 组合加密兼顾安全与性能使用AES 对称加密对业务大数据、接口报文加密速度快使用RSA 非对称加密对 AES 密钥加密传输安全不泄露使用SHA256加盐存储用户密码这也是目前支付、金融、政务系统的标准加密架构。