详解Java利用实现对称加密(DES、3DES、AES)

发布时间 - 2026-01-10 22:19:12    点击率:

有两句话是这么说的:

1)算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了。

2)编程就是算法和数据结构,算法和数据结构是编程的灵魂。

注意,这可不是我说的,是无数程序员总结的,话说的很实在也很精辟,若想长久可持续发展,多研究算法还是很有必要的,今天我给大家说说加密算法中的对称加密算法,并且这里将教会大家对称加密算法的编程使用。包含DES、3DES和AES三种对称加密算法的编程使用,干货满满。

1.对称密码算法

对称密码算法是当今应用范围最广,使用频率最高的加密算法。它不仅应用于软件行业,在硬件行业同样流行。各种基础设施凡是涉及到安全需求,都会优先考虑对称加密算法。

对称密码算法的加密密钥和解密密钥相同,对于大多数对称密码算法,加解密过程互逆。

(1)加解密通信模型

(2)特点:算法公开、计算量小、加密速度快、加密效率高

(3)弱点:双方都使用同样密钥,安全性得不到保证

对称密码有流密码和分组密码两种,但是现在普遍使用的是分组密码:

(4)分组密码工作模式

1)ECB:电子密码本(最常用的,每次加密均产生独立的密文分组,并且对其他的密文分组不会产生影响,也就是相同的明文加密后产生相同的密文)

2)CBC:密文链接(常用的,明文加密前需要先和前面的密文进行异或运算,也就是相同的明文加密后产生不同的密文)

除了这两种常用的工作模式,还有:

3)CFB:密文反馈

4)OFB:输出反馈

5)CTR:计数器

这五种工作模式主要是密码学中算法在进行推导演算的时候所应用到的。

6.分组密码填充方式

1)NoPadding:无填充

2)PKCS5Padding:

3)ISO10126Padding:

7.常用对称密码:

1)DES(Data Encryption Standard,数据加密标准)

2)3DES(Triple DES、DESede,进行了三重DES加密的算法)

3)AES(Advanced Encryption Standard,高级数据加密标准,AES算法可以有效抵制针对DES的攻击算法)
先来看一下这三种算法的简单对比:

算法 密钥长度 默认密钥长度 工作模式 填充方式
DES 56 56 ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 NoPadding、PKCS5Padding、ISO10126Padding
3DES 112、168 168 ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 NoPadding、PKCS5Padding、ISO10126Padding
AES 128、192、256 128 ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 NoPadding、PKCS5Padding、ISO10126Padding

下面我们看如何使用 DES / 3DES / AES 三种算法实现 对称加密:

2.DES算法

1.DES:数据加密标准,是对称加密算法领域中的典型算法

2.特点:密钥偏短(56位)、生命周期短(避免被破解)

3.Java实现

1)生成密钥

KeyGenerator keyGen = KeyGenerator.getInstance("DES");//密钥生成器
keyGen.init(56);//初始化密钥生成器
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

2)加密

SecretKey secretKey = new SecretKeySpec(key, "DES");//恢复密钥
Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,加密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3)解密

SecretKey secretKey = new SecretKeySpec(key, "DES");//恢复密钥
Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作类
cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

我们可以发现,加密解密我们只是设置了不同的模式而已。

3.3DES算法

1.3DES:将密钥长度增至112位或168位,通过增加迭代次数提高安全性

2.缺点:处理速度较慢、密钥计算时间较长、加密效率不高

3.Java实现

1)生成密钥

KeyGenerator keyGen = KeyGenerator.getInstance("DESede");//密钥生成器
keyGen.init(168); //可指定密钥长度为112或168,默认为168 
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

2)3DES加密

SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢复密钥
Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3)3DES解密

SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢复密钥
Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作类
cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

4.AES算法(推荐使用)

1.AES:高级数据加密标准,能够有效抵御已知的针对DES算法的所有攻击

2.特点:密钥建立时间短、灵敏性好、内存需求低、安全性高

3.Java实现

1)生成密钥

KeyGenerator keyGen = KeyGenerator.getInstance("AES");//密钥生成器
keygen.init(128); //默认128,获得无政策权限后可为192或256
SecretKey secretKey = keyGen.generateKey();//生成密钥
byte[] key = secretKey.getEncoded();//密钥字节数组

2)AES加密

SecretKey secretKey = new SecretKeySpec(key, "AES");//恢复密钥
Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作类
cipher.init(Cipher.ENCRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//加密data

3)AES解密

SecretKey secretKey = new SecretKeySpec(key, "AES");//恢复密钥
Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作类
cipher.init(Cipher.DECRYPT_MODE, secretKey);//对Cipher初始化,解密模式
byte[] cipherByte = cipher.doFinal(data);//解密data

为了方便使用,我对DES / 3DES / AES 三种算法进行了工具类编写,地址:下载地址 (新增DES/3DES/AES工具类)。

到此,DES / 3DES / AES 三种算法实现 对称加密 就说完了。希望对大家的学习有所帮助,也希望大家多多支持。


# java实现对称加密  # java  # des对称加密算法  # AES对称加密算法  # Java实现AES加密算法的简单示例分享  # java实现的AES加密算法完整实例  # Java AES加密解密的简单实现方法  # Java使用AES加密和解密的实例详解  # Java 如何实现AES加密  # Java AES加密和解密教程  # Java实现AES加密和解密方式完整示例  # Java中的AES加密算法用法示例详解  # 数据结构  # 三种  # 进行了  # 的是  # 加解密  # 我说  # 下载地址  # 两种  # 我对  # 很有  # 一切都  # 推荐使用  # 我们可以  # 也很  # 对其  # 就把  # 不高  # 我给  # 掉了  # 就说 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JS经典正则表达式笔试题汇总  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Swift中swift中的switch 语句  浅谈javascript alert和confirm的美化  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Laravel安装步骤详细教程_Laravel环境搭建指南  如何快速搭建高效服务器建站系统?  JavaScript实现Fly Bird小游戏  高防服务器租用指南:配置选择与快速部署攻略  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  如何选择可靠的免备案建站服务器?  Laravel怎么清理缓存_Laravel optimize clear命令详解  如何利用DOS批处理实现定时关机操作详解  JavaScript数据类型有哪些_如何准确判断一个变量的类型  *服务器网站为何频现安全漏洞?  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  html如何与html链接_实现多个HTML页面互相链接【互相】  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  ,怎么在广州志愿者网站注册?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  php打包exe后无法访问网络共享_共享权限设置方法【教程】  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  企业网站制作这些问题要关注  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  JavaScript如何实现错误处理_try...catch如何捕获异常?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  怎么用AI帮你为初创公司进行市场定位分析?  如何在IIS中新建站点并解决端口绑定冲突?  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  如何用JavaScript实现文本编辑器_光标和选区怎么处理  网站制作软件有哪些,制图软件有哪些?  Laravel如何配置任务调度?(Cron Job示例)  黑客如何利用漏洞与弱口令入侵网站服务器?  linux写shell需要注意的问题(必看)  Laravel PHP版本要求一览_Laravel各版本环境要求对照  如何在 React 中条件性地遍历数组并渲染元素  LinuxShell函数封装方法_脚本复用设计思路【教程】  香港网站服务器数量如何影响SEO优化效果?  ,在苏州找工作,上哪个网站比较好?  EditPlus中的正则表达式 实战(2)  Mybatis 中的insertOrUpdate操作  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  活动邀请函制作网站有哪些,活动邀请函文案?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何做网站制作流程,*游戏网站怎么搭建?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Laravel如何与Pusher实现实时通信?(WebSocket示例)  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】