【Java实战】Java加解密算法全解析:分类、场景与国密算法实战总结
作者简介大家好我是CodeStats。一个在底层技术上“考古”了四年的硬核爱好者也是WWAIC全周项目AI编程范式的提出者和实践者。我曾手写过一个完整的Java Web框架从IoC容器到嵌入式Tomcat代码全开源也喜欢用通俗的语言拆解CPU、JVM、操作系统的运行本质。我的技术信条所有高深的技术最后都能用大白话讲清楚。如果讲不清楚说明还没真正理解。 本文获取你将学到什么读完这篇文章你将彻底搞懂以下5个核心问题从此Java加解密面试对你不再设防序号你将掌握的知识点解决的核心困惑①Java加解密算法的三大分类对称加密、非对称加密、哈希算法到底是什么②对称加密 vs 非对称加密的使用场景、密钥长度和密文长度什么时候用AES什么时候用RSA③哈希算法有哪些如何利用MD5进行登录验证加盐怎么用密码为什么不能明文存储④国密算法SM2/SM3/SM4分别是什么类型对应哪些国际算法国密算法如何对标国际标准⑤SM4有哪些工作模式CBC/CTR/GCM区别是什么Base64和Hex长度有何区别为什么需要IV向量SM4怎么选模式IV是什么一、Java加解密算法如何分类Java中的加解密算法通常可以分为三大类1.1 对称加密Symmetric Encryption定义加密和解密使用同一个密钥的加密算法。特点✅ 加密速度快、效率高适合大量数据加密❌ 密钥分发和管理困难——如何安全地把密钥告诉对方常见算法AES、DES、3DES、SM41.2 非对称加密Asymmetric Encryption定义加密和解密使用一对密钥公钥Public Key和私钥Private Key。公钥加密的数据只能用对应的私钥解密。特点✅ 安全性高解决了密钥分发问题❌ 速度较慢不适合加密大量数据常见算法RSA、ECC椭圆曲线加密、DSA、SM21.3 哈希算法Hash Algorithm / Message Digest定义将任意长度的数据转换成固定长度的、不可逆的哈希值散列值。特点单向、不可逆无法从哈希值还原出原始数据✅ 主要用于验证数据完整性而非加密常见算法MD5、SHA-1、SHA-256、SM3二、对称加密和非对称加密使用场景、密钥长度与密文长度2.1 使用场景对比对比维度对称加密非对称加密密钥数量1个加解密共用2个公钥加密私钥解密加密速度✅ 快❌ 慢密钥分发❌ 困难✅ 安全公钥可公开典型场景大量数据加密、数据库字段加密密钥分发、数字签名、身份认证代表算法AES、SM4RSA、SM2工程实践中的黄金组合用非对称加密如RSA/SM2安全地传输对称加密如AES/SM4的密钥然后用对称加密来加密实际的大量数据。这就是混合加密的经典模式。2.2 密钥长度算法密钥长度位密钥长度字节AES128 / 192 / 25616 / 24 / 32 字节SM4128固定16 字节RSA2048 / 3072 / 4096256 / 384 / 512 字节SM2256固定32 字节⚠️注意1字节 8位。所以“128位”就是“16字节”。代码中常遇到InvalidKeyException多半是密钥字节数不对。2.3 密文长度算法密文长度说明AES/SM4对称与明文等长填充后分组加密需按块大小16字节填充RSA非对称与密钥长度相同如2048位密钥 → 密文256字节SM2非对称64 明文长度 32 字节C1固定64字节 C2(明文) C3固定32字节为什么RSA不能加密大数据RSA加密的明文必须比密钥长度少11字节PKCS#1填充。例如2048位256字节的RSA密钥最多只能加密245字节的明文。所以RSA通常只用来加密对称密钥或小数据。三、哈希算法有哪些如何利用MD5进行登录验证3.1 常见哈希算法算法输出长度位输出长度字节安全性MD512816❌ 已破解不推荐用于安全场景SHA-116020❌ 已破解SHA-25625632✅ 安全SM325632✅ 安全3.2 为什么密码不能明文存储如果数据库被攻破所有用户的明文密码将直接暴露。正确的做法是存储密码的哈希值而非明文。3.3 MD5登录验证流程⚠️ 注意MD5已不安全仅作原理演示注册时text用户密码 123456 → MD5加密 → e10adc3949ba59abbe56e057f20f883e → 存入数据库登录时text用户输入 123456 → MD5加密 → e10adc3949ba59abbe56e057f20f883e → 与数据库比对 → ✅ 一致则登录成功3.4 加盐Salting场景示例为什么需要加盐不加盐的话相同密码会产生相同的MD5值。黑客可以用彩虹表预先计算的MD5字典快速破解。加盐后的流程注册时text1. 为用户生成随机盐值如 xYz9Kj3M 2. 计算MD5(密码 盐值) a8f5d6e7c8b9a1... 3. 存储{MD5值, 盐值} 到数据库登录时text1. 根据用户名取出 {存储的MD5, 盐值} 2. 计算MD5(用户输入密码 盐值) 3. 比对是否一致加盐的效果即使两个用户的密码都是123456由于盐值不同最终存储的哈希值也完全不同彩虹表彻底失效。⚠️ 生产环境强烈建议MD5已经过时。对于新项目强烈推荐使用 BCrypt、SCrypt 或 Argon2它们内置加盐且被设计为“慢哈希”能有效抵抗暴力破解。四、国密算法SM2/SM3/SM4分别是什么对应什么国际算法国密算法是国家密码管理局认定和发布的一系列具有自主知识产权的国产密码算法标准。国密算法算法类型对标国际算法主要用途SM2非对称加密椭圆曲线RSA / ECDSA / ECDH数字签名、密钥交换、公钥加密SM3哈希算法杂凑算法SHA-256数据完整性校验、消息认证SM4对称加密分组密码AES大量数据加密4.1 SM2非对称加密SM2基于椭圆曲线密码ECC用256位密钥就能达到RSA 2048/3072位的同等安全强度。主要包含数字签名、密钥交换和公钥加密三大功能。4.2 SM3哈希算法SM3是密码杂凑算法输出256位32字节的哈希值用于替代MD5/SHA-1/SHA-256等国际算法。4.3 SM4对称加密SM4是分组对称密码算法分组长度和密钥长度均为128位16字节。它承担了生产环境中最繁重的数据加解密任务。国密TLS的经典组合SM2证书 SM4加密 SM3哈希构成完整的国产加密通信套件。五、SM4的工作模式CBC/CTR/GCM区别、Base64 vs Hex、为什么需要IV5.1 SM4有哪些工作模式SM4作为分组密码块大小128位/16字节需要工作模式来处理任意长度的数据。常见模式包括ECB、CBC、CFB、OFB、CTR、GCM、CCM、XTS。5.2 CBC vs CTR vs GCM 核心对比对比维度CBCCTRGCM是否需要填充✅ 需要PKCS7Padding❌ 不需要❌ 不需要加密可并行❌ 不可并行✅ 完全可并行✅ 完全可并行解密可并行✅ 可并行✅ 完全可并行✅ 完全可并行完整性校验❌ 无❌ 无✅ 自带认证标签AEAD推荐度⚠️ 可用兼容性好✅ 推荐高性能⭐强烈推荐CBC模式每个明文块先与前一个密文块异或再加密。加密必须串行但解密可以并行。CTR模式通过加密计数器生成密钥流再与明文异或。加解密完全可并行性能极高。GCM模式在CTR基础上增加了消息认证功能同时提供加密和完整性校验AEAD模式。这是目前最安全、最现代的选择。5.3 为什么需要IV向量IV初始化向量的作用是确保相同明文在不同次加密中产生不同的密文。CBC模式IV必须随机且不可预测长度固定为16字节CTR/GCM模式IV常称Nonce必须唯一GCM推荐12字节⚠️致命陷阱CTR和GCM模式下同一密钥的Nonce绝对不允许重复使用否则密钥流会重复攻击者可通过异或直接破解明文。5.4 Base64编码 vs Hex编码长度有何区别加密后的密文是二进制字节数组需要编码成文本才能传输或存储。两种常见编码方式编码方式说明16字节密文的长度Hex十六进制1字节 → 2个十六进制字符16 × 2 32字符Base64每3字节 → 4个字符⌈16/3⌉ × 4 24字符为什么长度不同Hex简单直接每个字节拆成两个字符长度固定为密文长度 × 2Base64用64个可打印字符表示二进制压缩效率更高长度约为密文长度 × 4/3选哪个Hex可读性好适合调试、日志Base64更紧凑适合网络传输 总结算法分类核心特点代表算法典型场景对称加密一个密钥加解密快AES、SM4大量数据加密非对称加密公钥/私钥对慢但安全RSA、SM2密钥分发、数字签名哈希算法不可逆固定长度SHA-256、SM3密码存储、完整性校验Java中的加密框架Java通过JCAJava Cryptography Architecture和JCEJava Cryptography Extension提供加密功能的框架和API。核心类是javax.crypto.Cipher它整合了算法/工作模式/填充模式。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注后续会持续输出更多Java技术干货有疑问欢迎在评论区留言交流

相关新闻

商业航天中AI智能体的技术演进与应用实践

商业航天中AI智能体的技术演进与应用实践

1. 商业航天与AI智能体的融合背景商业航天领域正在经历从传统政府主导模式向市场化运作的深刻转型。过去十年间,SpaceX、蓝色起源等私营企业的崛起,已经将发射成本降低了近一个数量级。然而,随着太空经济规模预计在2030年突破1万亿美元&#…

2026/10/20 5:09:52 阅读更多 →
ionet框架重大版本更新,多方面升级助力多行业底层基建!

ionet框架重大版本更新,多方面升级助力多行业底层基建!

ionet框架重大版本更新,优势显著!我们兴奋地宣布,ionet框架迎来重大版本更新,这标志着它在超高并发、超大载荷吞吐以及分布式长连接网络接入领域迈出坚实一步。通过彻底拥抱Netty统一网络层以及扩展Aeron高性能传输边界&#xff0…

2026/10/20 9:00:47 阅读更多 →
多模态大模型在农业病虫害识别中的应用与实践

多模态大模型在农业病虫害识别中的应用与实践

1. 项目背景与核心价值在传统农业生产中,病虫害识别主要依赖农技人员的肉眼观察和经验判断,这种方式存在识别效率低、准确率不稳定、响应速度慢等痛点。随着深度学习技术的发展,基于视觉的农作物病虫害识别系统已经取得显著进展,但…

2026/10/16 20:36:30 阅读更多 →

最新新闻

Maltego双平台配置实战:从Java环境到关联分析图谱

Maltego双平台配置实战:从Java环境到关联分析图谱

做安全分析、做资产梳理、做事件调查的人,迟早会和Maltego这个工具打交道。它是一款开源信息收集与关联分析工具,擅长把域名、IP、邮箱、账号、证书这类零散信息,整理成一张可以交互操作的关系图谱。我第一次在别人的演示里看到它把一个IP展开…

2026/10/20 15:32:23 阅读更多 →
智能体Agent研究全景:四条主线揭示从能力到落地的关键进展

智能体Agent研究全景:四条主线揭示从能力到落地的关键进展

我花了差不多两个月,把近一年能翻到的智能体相关论文集中过了一遍,越看越觉得“最新进展”这个词其实很抽象。最明显的信号不是某篇论文突然封神,而是整个研究盘子在变:单体智能体开始讲记忆和规划,多智能体开始讲协作…

2026/10/20 15:32:23 阅读更多 →
artcraft:本地优先的创作者作品管理与灵感整理系统设计

artcraft:本地优先的创作者作品管理与灵感整理系统设计

1. 项目缘起与整体设计思路第一次看到“artcraft”这个标题,我脑子里蹦出来的第一反应是“艺术”加“手艺”的组合词。直觉告诉我,这大概率是一个跟创意工具、手工制作、或者数字艺术创作沾边的项目。后来跟几个做独立开发的朋友聊,发现大家对…

2026/10/20 15:32:23 阅读更多 →
Abaqus OBJ结果转VTK格式:Python实现数据可视化

Abaqus OBJ结果转VTK格式:Python实现数据可视化

简介:面向CAE仿真工程师与Python开发者的Abaqus后处理辅助脚本,可将Abaqus计算结果(ODB文件)转换为通用VTK格式,便于在主流可视化工具中开展后处理。脚本基于Abaqus的ODB接口读取几何、网格、应力应变与位移等结果数据…

2026/10/20 15:32:23 阅读更多 →
Minikube本地K8s实战:从部署到深度调试的完整指南

Minikube本地K8s实战:从部署到深度调试的完整指南

1. 项目概述:为什么一个本地K8s环境比你想象中更重要“k8s 入门-minikube部署和基本使用”——这个标题看起来平平无奇,但背后藏着绝大多数开发者真正卡住的第一个关卡:不是学不会YAML语法,而是根本没机会在真实、可控、可打断的环…

2026/10/20 15:32:23 阅读更多 →
深入解析上下文模式:从参数透传到架构级上下文管理

深入解析上下文模式:从参数透传到架构级上下文管理

1. 从"上下文模式"说起:一个被低估的架构决策第一次看到"context-mode"这个词,很多人会下意识地把它归类成某个框架里的配置项,或者某个API的一个参数枚举值。但如果你真正在工程一线待过几年,就会明白&#…

2026/10/20 15:31:21 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →