Java 开发中实现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的攻击算法)

先来看一下这三种算法的简单对比:

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

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或256SecretKey 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

原文发布于微信公众号 - Java学习网(javalearns)

原文发表时间:2018-10-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小工匠技术圈

【Java小工匠聊密码学】--数字签名-RSA

(1)MD (MD2withRSA、MD5withRSA) (2)SHA (SHA1withRSA、SHA256withRSA、SHA384withRSA、SH...

2333
来自专栏iOS 开发杂谈

HTTPS 之对称加密与非对称加密

加密 encryption 与解密 decryption 使用的是同样的密钥 secret key,对称加密是最快速、最简单的一种加密方式。加密和解密算法是公开...

2974
来自专栏日暮星辰

SSL/TLS加密检测脚本testssl.sh

以前SSL检测常用工具就是ssllabs的:https://www.ssllabs.com/ssltest/ 以及国内的https://myssl.com/.

5042
来自专栏个人随笔

Java MD5加密与RSA加密

8204
来自专栏小工匠技术圈

数字签名-ECDSA

 &emspECDH是基于ECC(Elliptic Curve Cryptosystems,椭圆曲线密码体制,参看ECC)的DH( Diffie-Hellman...

2323
来自专栏小工匠技术圈

【小工匠聊密码学】--对称加密--概述

  对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文“原始数据”和“加密密钥“一起经过特殊加密算法处理后,使其变成复杂的加密密文发...

782
来自专栏会跳舞的机器人

RSA非对称加密

需要注意的一点,这个公钥和私钥必须是一对的,如果用公钥对数据进行加密,那么只有使用对应的私钥才能解密,所以只要私钥不泄露,那么我们的数据就是安全的。

3152
来自专栏大大的微笑

使用PBE方式进行加密,解密

package com.demo.pbe; import java.security.Key; import java.security.NoSuchAlgo...

3425
来自专栏小工匠技术圈

【小工匠聊密码学】--对称加密--DES

  DES对称加密,对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有...

702
来自专栏java 成神之路

RSA 非对称加密原理(小白也能看懂哦~)

1.9K9

扫码关注云+社区

领取腾讯云代金券