news 2026/6/11 14:09:04

Java常见加密算法全解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java常见加密算法全解

一、加密算法整体分类(核心基调)

Java 所有加密算法,整体分为三大类,也是行业通用标准分类:

  1. 不可逆摘要算法(哈希加密):只能加密、不能解密,用于密码存储、数据校验

  2. 对称加密算法:加密解密同一密钥,速度快、适合大批量数据加密传输

  3. 非对称加密算法:公钥加密、私钥解密,安全性极高、速度慢,用于签名、密钥交换

所有业务加密场景,全部基于这三类算法组合实现。下面逐个深度拆解+实战代码。


二、不可逆摘要算法(哈希算法)

核心特点:单向加密、不可逆、无解密方法、原文相同则密文永远相同、长度固定。

核心用途:用户密码存储、文件完整性校验、数据防篡改。

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 组合加密,兼顾安全与性能:

  1. 使用AES 对称加密对业务大数据、接口报文加密(速度快)

  2. 使用RSA 非对称加密对 AES 密钥加密传输(安全不泄露)

  3. 使用SHA256加盐存储用户密码

这也是目前支付、金融、政务系统的标准加密架构

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 14:08:31

WechatBakTool:如何安全备份与恢复你的微信聊天记录

WechatBakTool:如何安全备份与恢复你的微信聊天记录 【免费下载链接】WechatBakTool 基于C#的微信PC版聊天记录备份工具,提供图形界面,解密微信数据库并导出聊天记录。 项目地址: https://gitcode.com/gh_mirrors/we/WechatBakTool 在…

作者头像 李华
网站建设 2026/6/11 14:08:29

EasyExcel核心注解实战:从基础配置到样式定制

1. EasyExcel入门:为什么选择注解式开发? 第一次接触Excel导出功能时,我像大多数开发者一样选择了Apache POI。直到在某个深夜加班调试单元格样式时,偶然发现了EasyExcel这个宝藏库。最让我惊喜的是它的注解式开发模式——用几个简…

作者头像 李华
网站建设 2026/6/11 14:07:09

MSC8112 DSP硬件设计实战:复位、电源与接口时序深度解析

1. 项目概述:为什么DSP的复位与电源设计是“生死线”搞了十几年嵌入式硬件,从早期的单片机到现在的多核DSP,踩过的坑不计其数。但要说哪个环节最容易让项目“翻车”,甚至在实验室跑得好好的,一到现场就“趴窝”&#x…

作者头像 李华
网站建设 2026/6/11 14:06:06

从零开始:无引导分区与全盘格式化后的纯净系统重生指南

1. 当硬盘变成一张白纸:极端场景下的系统重生之路 电脑突然无法启动,屏幕上只剩下冰冷的BIOS界面——这种场景对于误操作全盘格式化的用户来说堪称噩梦。我遇到过不少朋友在重装系统时手滑勾选了"全盘格式化",连带引导分区一起消失…

作者头像 李华
网站建设 2026/6/11 14:02:31

Linux下开箱即用的Kafka集群图形化管理工具(1.3.3.22)

本文还有配套的精品资源,点击获取 简介:直接解压就能跑的Kafka Manager控制台,专为Linux环境打包,放在/opt/module目录下即可启动。核心配置只需改conf/application.conf里的ZooKeeper地址,比如hadoop102:2181,hado…

作者头像 李华