3des 加密

335人阅读 评论(0) 收藏 举报

有两句话是这么说的: 

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)生成密钥

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

2)加密

?
1
2
3
4
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)解密

?
1
2
3
4
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)生成密钥

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

2)3DES加密

?
1
2
3
4
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解密

?
1
2
3
4
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
查看评论

js实现3DES加密

  • 2016年08月26日 10:54
  • 18KB
  • 下载

3DES加密工具类

/** * 3DES加密工具类 * * @author zhyimport java.security.Key; import javax.crypto.Cipher; import jav...
  • weilai_zhilu
  • weilai_zhilu
  • 2016-11-23 14:29:14
  • 1411

服务端使用3DES解密,客户端使用3DES加密

我们知道,要使用3DES算法进行加解密,通常做法是: 1、服务器和客户端约定好加密密钥key 2、服务端使用key对明文plainText1进行3DES加密,得到密文cipherText1...
  • LVXIANGAN
  • LVXIANGAN
  • 2017-04-12 16:48:33
  • 941

[.net]标准 3DES 加密/解密

using System;using System.Security.Cryptography;using System.Text;/**//// /// Crypto3DES 的摘要说明。/// p...
  • lxfan
  • lxfan
  • 2006-12-07 12:06:00
  • 3871

3DES 和 AES 加密算法的使用

3DES 介绍上篇文章已经介绍了 DES 算法的使用,并且也提到,在计算机计算速度特别快的今天,要破解 DES 加密过后的数据是完全有可能做到的,为什么呢?因为 DES 算法的密钥 也就64位,所有可...
  • Hwaphon
  • Hwaphon
  • 2016-08-12 12:36:14
  • 4751

3DES加密—java/OC

移动开发中遇到的最让人纠结的要属Java、Android和iPhone三个平台加解密不一致的问题。因为手机端后台通常是用JAVA开发的Web Service,Android和iPhone客户端调用同样...
  • pjk1129
  • pjk1129
  • 2016-01-11 17:47:26
  • 4202

3DES加密解密

 3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密。 3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIS...
  • xyu1234
  • xyu1234
  • 2017-02-17 16:47:03
  • 3374

DES/3DES加密,解密

〇、前言:         最近在项目中,涉及到与第三方厂家系统进行对接时,在参数传递过程中考虑到了数据的安全性,故双方采用3DES进行对传递参数的加解密,因此,进一步了解了下3DES的加解密算法,再...
  • xcbeyond
  • xcbeyond
  • 2016-08-07 01:48:33
  • 3743

php中3DES加密技术

因为工作中要用到加密,接口中要求也是用密文传输数据,用到3des加密,就研究了一下。 在网上也找了好多,但是都不可以用,没法正式运行,终于找到一个可以运行的,自己又修改了一下,记录下来,以后还可能会...
  • moqiang02
  • moqiang02
  • 2014-03-19 21:38:37
  • 2833

Android端3DES加密

加密感脚好高大上,直接复制代码。public class Constants { // 密钥 public final static String secretKey = "0535Y...
  • u013318615
  • u013318615
  • 2015-11-18 14:33:42
  • 898
    个人资料
    等级:
    访问量: 43万+
    积分: 8880
    排名: 2706
    最新评论