Java利用DES / 3DES / AES这三种算法分别实现对称加密

Posted 黑客技术与网络安全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java利用DES / 3DES / AES这三种算法分别实现对称加密相关的知识,希望对你有一定的参考价值。

来自:郭朝的博客

链接:http://blog.csdn.net/smartbetter/article/details/54017759(点击尾部阅读原文前往)


有两句话是这么说的: 


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 / 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);  //可指定密钥长度为112168,默认为168      
SecretKey secretKey = keyGen.generateKey();//生成密钥   byte[] key = secretKey.getEncoded();//密钥字节数组

2)3DES加密

KeyGenerator keyGen = KeyGenerator.getInstance("DESede");//密钥生成器   
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,获得无政策权限后可为192256   
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 三种算法实现 对称加密 就说完了,喜欢记得“赞”一下哦!



●本文编号302,以后想阅读这篇文章直接输入302即可。

●输入m可以获取到文章目录

相关推荐↓↓↓
 

Linux学习

推荐

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、ios开发、C/C++、.NET、Linux、数据库、运维

以上是关于Java利用DES / 3DES / AES这三种算法分别实现对称加密的主要内容,如果未能解决你的问题,请参考以下文章

java-信息安全-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4

对称加密方案学习 DES / 3DES / AES

[android]DES/3DES/AES加密方式

图解DES3DES和AES加密算法

图解DES3DES和AES加密算法

图解DES3DES和AES加密算法