zoukankan      html  css  js  c++  java
  • 用Java实现3DES

    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));

             }

      } 

  • 相关阅读:
    什么是线程池?
    线程包括哪些状态?状态之间是如何变化的?
    C语言中的文本流与二进制流的区别
    Windows+IIS结合LVS+Keepalived是实现Linux负载均衡软件
    Linux中的lo回环接口详细介绍
    Keepalived原理与实战精讲
    分布式文件系统MFS(moosefs)实现存储共享(第二版)
    C语言缓冲区(缓存)详解
    Android如何防止apk程序被反编译
    Android APK反编译详解(附图)
  • 原文地址:https://www.cnblogs.com/qiaoxu/p/3985619.html
Copyright © 2011-2022 走看看