有两句话是这么说的:

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加密算法用法示例详解
# 数据结构
# 三种
# 进行了
# 的是
# 加解密
# 我说
# 下载地址
# 两种
# 我对
# 很有
# 一切都
# 推荐使用
# 我们可以
# 也很
# 对其
# 就把
# 不高
# 我给
# 掉了
# 就说
相关文章:
如何高效完成独享虚拟主机建站?
公司网站制作价格怎么算,公司办个官网需要多少钱?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
建站之星如何保障用户数据免受黑客入侵?
上海网站制作开发公司,上海买房比较好的网站有哪些?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
行程制作网站有哪些,第三方机票电子行程单怎么开?
如何选择香港主机高效搭建外贸独立站?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何用腾讯建站主机快速创建免费网站?
如何配置IIS站点权限与局域网访问?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
建站之星北京办公室:智能建站系统与小程序生成方案解析
建站主机功能解析:服务器选择与快速搭建指南
网站制作报价单模板图片,小松挖机官方网站报价?
定制建站策划方案_专业建站与网站建设方案一站式指南
,制作一个手机app网站要多少钱?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
代购小票制作网站有哪些,购物小票的简要说明?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
C#如何序列化对象为XML XmlSerializer用法
制作农业网站的软件,比较好的农业网站推荐一下?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
网站app免费制作软件,能免费看各大网站视频的手机app?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何在阿里云高效完成企业建站全流程?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
建站之星价格显示格式升级,你的预算足够吗?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
建站主机核心功能解析:服务器选择与网站搭建流程指南
建站之星免费版是否永久可用?
如何解决ASP生成WAP建站中文乱码问题?
模具网站制作流程,如何找模具客户?
北京网站制作公司哪家好一点,北京租房网站有哪些?
建站主机选虚拟主机还是云服务器更好?
如何获取开源自助建站系统免费下载链接?
如何用PHP工具快速搭建高效网站?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
海南网站制作公司有哪些,海口网是哪家的?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
h5在线制作网站电脑版下载,h5网页制作软件?
大连 网站制作,大连天途有线官网?
建站之星×万网:智能建站系统+自助建站平台一键生成
*请认真填写需求信息,我们会在24小时内与您取得联系。