DES算法应用(调用JAVA库有DES算法API)

原创 2007年09月21日 08:19:00

/*
 * DesEncrypt.java
 *
 * Created on 2007-9-20, 16:10:47
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

//思路: 因为   任意一个字符串,都是由若干字节表示的,每个字节实质就是一个
//              有8位的进进制数,
//      又因为   一个8位二进制数,可用两位16进制字符串表示.
//        因此   任意一个字符串可以由两位16进制字符串表示。
//          而   DES是对8位二进制数进行加密,解密。
//        所以   用DES加密解密时,可以把加密所得的8位进进制数,转成
//               两位16进制数进行保存,传输。
//    具体方法:1 把一个字符串转成8位二进制数,用DES加密,得到8位二进制数的
//                密文
//              2 然后把(由1)所得的密文转成两位十六进制字符串
//              3 解密时,把(由2)所得的两位十六进制字符串,转换成8位二进制
//                数的密文
//              4 把子3所得的密文,用DES进行解密,得到8位二进制数形式的明文,
//                并强制转换成字符串。
// 思考:为什么要通过两位16进制数字符串保存密文呢?
//       原因是:一个字符串加密后所得的8位二进制数,通常不再时字符串了,如果
//              直接把这种密文所得的8位二进制数强制转成字符串,有许多信息因为异
//              常而丢失,导制解密失败。因制要把这个8位二制数,直接以数的形式
//              保存下来,而通常是用两位十六进制数表示。
package frelationmainten;

import   java.security.Key;  
import   java.security.SecureRandom;  
import   javax.crypto.Cipher;  
import   javax.crypto.KeyGenerator;  
 
   
/**  
    *    
    *   使用DES加密与解密,可对byte[],String类型进行加密与解密  
    *   密文可使用String,byte[]存储.  
    *    
    *   方法:  
    *   void   getKey(String   strKey)从strKey的字条生成一个Key  
    *    
    *   String   getEncString(String   strMing)对strMing进行加密,返回String密文  
    *   String   getDesString(String   strMi)对strMin进行解密,返回String明文  
    *    
    *byte[]   getEncCode(byte[]   byteS)byte[]型的加密  
    *byte[]   getDesCode(byte[]   byteD)byte[]型的解密  
*/  
   
public   class   DesEncrypt {  
   Key   key;  
    /**  
    *   根据参数生成KEY  
    *   @param   strKey  
    */  
    public   void   getKey(String   strKey) {  
        try{  
            KeyGenerator   _generator   =   KeyGenerator.getInstance("DES");  
            _generator.init(new   SecureRandom(strKey.getBytes()));  
            this.key   =   _generator.generateKey();  
            _generator=null;  
        }catch(Exception   e){  
            e.printStackTrace();  
        }  
    }  
    /**  
    *   加密String明文输入,String密文输出  
    *   @param   strMing  
    *   @return  
    */  
    public   String   getEncString(String   strMing) {  
        byte[]   byteMi   =   null;  
        byte[]   byteMing   =   null;  
        String   strMi   =   "";   
        try {   
            return byte2hex(getEncCode (strMing.getBytes() ) );

//            byteMing   =   strMing.getBytes("UTF8");  
//            byteMi   =   this.getEncCode(byteMing);  
//            strMi   =  new String( byteMi,"UTF8");
        }  
        catch(Exception   e){  
            e.printStackTrace();  
        }  
        finally {  
            byteMing   =   null;  
            byteMi   =   null;  
        }  
        return   strMi;  
    }  
    /**  
    *   解密   以String密文输入,String明文输出  
    *   @param   strMi  
    *   @return  
    */  
    public   String   getDesString(String   strMi)  {  
        byte[]   byteMing   =   null;  
        byte[]   byteMi   =   null;  
        String   strMing   =   "";  
        try  {  
            return new String(getDesCode(hex2byte(strMi.getBytes()) ));  

//            byteMing   =   this.getDesCode(byteMi);  
//            strMing   =   new   String(byteMing,"UTF8");  
        }  
        catch(Exception   e) {  
            e.printStackTrace();  
        }  
        finally {  
            byteMing   =   null;  
            byteMi   =   null;  
        }  
        return   strMing;  
    }  
    /**  
    *   加密以byte[]明文输入,byte[]密文输出  
    *   @param   byteS  
    *   @return  
    */  
    private   byte[]   getEncCode(byte[]   byteS) {  
        byte[]   byteFina   =   null;  
        Cipher   cipher;  
        try {  
            cipher   =   Cipher.getInstance("DES");  
            cipher.init(Cipher.ENCRYPT_MODE,   key);  
            byteFina   =   cipher.doFinal(byteS);  
        }  
        catch(Exception   e) {  
            e.printStackTrace();  
        }  
        finally {  
            cipher   =   null;  
        }  
        return   byteFina;  
    }  
    /**  
    *   解密以byte[]密文输入,以byte[]明文输出  
    *   @param   byteD  
    *   @return  
    */  
    private   byte[]   getDesCode(byte[]   byteD) {  
        Cipher   cipher;  
        byte[]   byteFina=null;  
        try{  
            cipher   =   Cipher.getInstance("DES");  
            cipher.init(Cipher.DECRYPT_MODE,   key);  
            byteFina   =   cipher.doFinal(byteD);  
        }catch(Exception   e){  
            e.printStackTrace();  
        }finally{  
            cipher=null;  
        }  
        return   byteFina;  
    } 
/** 
* 二行制转字符串 
* @param b 
* @return 
*/  
    public static String byte2hex(byte[] b) {   //一个字节的数,
        // 转成16进制字符串
       String hs = "";  
       String stmp = "";  
       for (int n = 0; n < b.length; n++) {  
           //整数转成十六进制表示
           stmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); 
           if (stmp.length() == 1)  
               hs = hs + "0" + stmp;  
           else  
               hs = hs + stmp;  
       }  
       return hs.toUpperCase();   //转成大写
  }  
   
   public static byte[] hex2byte(byte[] b) {  
      if((b.length%2)!=0) 
         throw new IllegalArgumentException("长度不是偶数");  
       byte[] b2 = new byte[b.length/2];  
       for (int n = 0; n < b.length; n+=2) {  
         String item = new String(b,n,2);  
         // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个进制字节
         b2[n/2] = (byte)Integer.parseInt(item,16);  
       }  
  
       return b2;  
 }  


    public   static   void   main(String[]   args){  

        System.out.println("hello");  
        DesEncrypt   des=new   DesEncrypt();//实例化一个对像  
        des.getKey("aadd");//生成密匙  

        String   strEnc   =   des.getEncString("云海飞舞雲122");//加密字符串,返回String的密文  
        System.out.println(strEnc);  

        String   strDes   =   des.getDesString(strEnc);//把String   类型的密文解密  
        System.out.println(strDes);  
        new DesEncrypt();
    }  

}  
 

des算法java模拟实现

大二下学期应用密码学课程设计 已同步github项目:url:https://github.com/leiflee/desdemogit:https://github.com/leiflee/desd...
  • leiflyy
  • leiflyy
  • 2016年07月10日 13:44
  • 2294

在JAVA中使用DES算法

 此文非原创,由google整理而成。/** * DES算法 */public class DES {    /**     *     * @return DES算法密钥     */    pub...
  • irvine007
  • irvine007
  • 2006年08月02日 11:08
  • 5491

javacard DES算法API使用示例

很多时候我们并不需要自己去实现一个较为复杂的算法,而只需要知道怎么去调用现有的实现。API调用,在C/C++是用include+函数的形式,java其实也无非就是import+类(方法、变量)的形式,...
  • Lv_Victor
  • Lv_Victor
  • 2016年07月17日 19:51
  • 5206

【密码学】DES加解密原理及其Java实现算法

DES简介 DES(Data Encryption Standard)是对称加解密算法的一种,由IBM公司W.Tuchman和C.Meyer在上个世纪70年代开发。 该算法使用64位密钥...
  • White_Idiot
  • White_Idiot
  • 2017年03月28日 13:34
  • 1763

基于java类库的DES加密算法实现

真正的核心代码就是调用java类库实现的那部分加密部分核心代码 //Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance("DES"); //用密匙初...
  • super_cui
  • super_cui
  • 2017年04月26日 18:54
  • 537

DES算法C语言可运行源代码

转载自: http://blog.csdn.net/zidane_2014/article/details/37988657 #include #include int IP_...
  • sinat_27382047
  • sinat_27382047
  • 2017年05月19日 19:05
  • 682

DES加解密算法实现详解

一:实验原理: 1,将64位明文进行初始置换,置换规则是:把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长3 2位,其置换规则为将输入的第58位换到第一位,第50位换到第2...
  • Hufan11100914
  • Hufan11100914
  • 2014年06月27日 11:36
  • 3893

DES算法java实现,可以用在项目中

DES算法java实现,可以用在项目中 DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一...
  • gaowenhui2008
  • gaowenhui2008
  • 2015年05月20日 14:30
  • 2646

常用对称加密算法-DES

详细介绍:http://blog.csdn.net/cc41798520101/article/details/53673681 package com.test; import ...
  • cc41798520101
  • cc41798520101
  • 2017年04月27日 16:55
  • 487

DES算法初探

本篇博客为阅读《深入浅出密码学——常用加密技术原理与应用》一书,内容有所参考和引用,部分图片和表格采用了原文,版权归原书和原作者所有,如有侵权请告知删除,在此表示感谢!DES算法是一种典型的对称加密算...
  • jaye16
  • jaye16
  • 2016年09月02日 09:10
  • 2742
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DES算法应用(调用JAVA库有DES算法API)
举报原因:
原因补充:

(最多只允许输入30个字)