3DES,即三重DES,是DES的加强版,也是DES的一个更安全的变形。它使用3个56位(共168位)的密钥对数据进行三次加密,和DES相比,安全性得到了较大的提高。

实际上,3DES是一个过渡的加密算法。1999年,NIST将3-DES指定为DES向AES过渡的加密标准。

3DES以DES为基本模块,通过组合分组方法设计出分组加密算法。若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密,大大加强了数据的安全性。

若数据对安全性要求不高,可以让其中的两个密钥相等,这样,密钥的有效长度也有112位。

在Java的加密体系中,使用3DES非常简单,程序结构和使用DES时相同,只不过在初始化时将算法名称由"DES"改为"DESede"即可。

下列程序基本原理和P12_01相同,只不过将加密和解密过程写在一起。

import java.security.Security;

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

public class P12_02   {

public static void main(String[] args) throws Exception  {

//KeyGenerator提供对称密钥生成器的功能,支持各种算法

KeyGenerator keygen;

//SecretKey负责保存对称密钥

SecretKey deskey;

//Cipher负责完成加密或解密工作

Cipher c;

Security.addProvider(new com.sun.crypto.provider.SunJCE());

//实例化支持3DES算法的密钥生成器,算法名称用DESede

keygen = KeyGenerator.getInstance("DESede");

//生成密钥

deskey = keygen.generateKey();

//生成Cipher对象,指定其支持3DES算法

c = Cipher.getInstance("DESede");

String msg = "郭克华_安全编程技术";

System.out.println("明文是:" + msg);

//根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式

c.init(Cipher.ENCRYPT_MODE, deskey);

byte[] src = msg.getBytes();

//加密,结果保存进enc

byte[] enc = c.doFinal(src);

System.out.println("密文是:" + new String(enc));

//根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式

c.init(Cipher.DECRYPT_MODE, deskey);

//解密,结果保存进dec

byte[] dec = c.doFinal(enc);

System.out.println("解密后的结果是:"+ new String(dec));

}

}

最新文章

  1. 如何利用Pre.im分发iOS测试包
  2. CCAction
  3. 面试题25:最小的K个数
  4. (十)foreac遍历、break和countinue以及标签和switch循环
  5. 全面盘点当前Android后台保活方案的真实运行效果(截止2019年前)
  6. UI设计之动画—从虚拟到现实
  7. qml: 自定义输入框
  8. 搭建WordPress 个人博客
  9. exBSGS·BSGS-Senior/扩展的BSGS
  10. Vue.directive注册指令
  11. Android按钮事件的4种写法
  12. Beta Scrum Day 1 — 听说
  13. JavaScript数据结构-10.字典
  14. Hadoop中MapReduce计算框架以及HDFS可以干点啥
  15. Python库-BeautifulSoup
  16. python装饰器注意事项
  17. truffle运行特殊 无法找到module的处理方法
  18. printf函数对参数的计算顺序
  19. poj Sudoku(数独) DFS
  20. GitHub in vs2010、vs2013

热门文章

  1. 【练习】创建私有的dblink
  2. DB2日常维护——REORG TABLE命令优化数据库性能
  3. visio2007无法拖动
  4. 合并同一目录下多个EXCEL的多个sheet
  5. ORA-00845: MEMORY_TARGET not supported on this system
  6. SQL where 1=1的作用
  7. java学习之(内部类)
  8. Ossim应用体验视频
  9. hbase blocksize设置,与hdfs关系
  10. IIS报错 未将对象引用设置到对象的实例。