欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DES代码讲解

程序员文章站 2024-03-14 14:55:22
...
public class DESDemo {


/*
 * DES加密介绍
DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同**的算法。DES加密算法出自IBM的研究,
后来被美国*正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位**,以现代计算能力,
24小时内即可被**。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现
。
注意:DES加密和解密过程中,大于等于8位
 */
	public static void main(String[] args) throws Exception {
            // 明文  
            String str = "hello des";  
            // 密码  
            String password = "12345678";  //大于等于8位
            String desc = DESUlits.doWork(str, password,0);  
            System.out.println("密文:" + desc);  
            // 解密  
            str = DESUlits.doWork(desc, password,1);  
            System.out.println("明文:" +str);  
	}
}


加密和解密的工具类

public class DESUlits {

	/** 
     * 加密解密接口 
     * @param data      数据 
     * @param password  加密解密密码 必须8位字节 
     * @param flag      加密解密标志 0:加密 ,1:解密 
     * @return 
     */  
    public static String doWork(String data, String password,int flag) {  
        try {  
        	//1.DES算法要求有一个可信任的随机数源
            SecureRandom random = new SecureRandom(); 
            //2.创建一个DESKeySpec对象
            DESKeySpec desKey = new DESKeySpec(password.getBytes()); 
            //3.创建一个密匙工厂
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            //4.将DESKeySpec对象转换成SecretKey对象
            SecretKey securekey = keyFactory.generateSecret(desKey); 
            //5.Cipher对象实际完成加密/解密操作
            Cipher cipher = Cipher.getInstance("DES");  
            //加密   
            if(flag == 0){    
            	//创建一个BASE64Encoder对象进行加密
            	sun.misc.BASE64Encoder base64encoder = new sun.misc.BASE64Encoder();
            	//用密匙初始化Cipher对象
                cipher.init(Cipher.ENCRYPT_MODE, securekey, random);  
                //进行加密操作
                return base64encoder.encode(cipher.doFinal(data.getBytes("UTF-8")));  
            }else{ 
            	//解密
            	////创建一个BASE64Decoder对象进行解密
            	sun.misc.BASE64Decoder base64decoder = new sun.misc.BASE64Decoder();
            	
                byte[] encodeByte = base64decoder.decodeBuffer(data); 
                //用密匙初始化Cipher对象
                cipher.init(Cipher.DECRYPT_MODE, securekey, random); 
                //执行解密操作
                byte[] decoder = cipher.doFinal(encodeByte);  
                return new String(decoder,"UTF-8");  
            }  
              
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return null;  
    }  
}