zoukankan      html  css  js  c++  java
  • 加密解密工具类(Java,DES)

    一个Java版的DES加密工具类,能够用来进行网络传输数据加密,保存password的时候进行加密。

    import java.security.Key;
    import java.security.spec.AlgorithmParameterSpec;
    
    import javax.crypto.Cipher;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.DESKeySpec;
    import javax.crypto.spec.IvParameterSpec;
    
    /**
     * 加密解密工具包
     */
    public class CyptoUtils {
    
    	public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";
    	
        /**
         * DES算法,加密
         *
         * @param data 待加密字符串
         * @param key  加密私钥,长度不可以小于8位
         * @return 加密后的字节数组,一般结合Base64编码使用
         * @throws InvalidAlgorithmParameterException 
         * @throws Exception 
         */
        public static String encode(String key,String data) {
        	if(data == null)
        		return null;
        	try{
    	    	DESKeySpec dks = new DESKeySpec(key.getBytes());	    	
    	    	SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    	        //key的长度不可以小于8位字节
    	        Key secretKey = keyFactory.generateSecret(dks);
    	        Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
    	        IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());
    	        AlgorithmParameterSpec paramSpec = iv;
    	        cipher.init(Cipher.ENCRYPT_MODE, secretKey,paramSpec);           
    	        byte[] bytes = cipher.doFinal(data.getBytes());            
    	        return byte2hex(bytes);
        	}catch(Exception e){
        		e.printStackTrace();
        		return data;
        	}
        }
    
        /**
         * DES算法,解密
         *
         * @param data 待解密字符串
         * @param key  解密私钥,长度不可以小于8位
         * @return 解密后的字节数组
         * @throws Exception 异常
         */
        public static String decode(String key,String data) {
        	if(data == null)
        		return null;
            try {
    	    	DESKeySpec dks = new DESKeySpec(key.getBytes());
    	    	SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
                //key的长度不可以小于8位字节
                Key secretKey = keyFactory.generateSecret(dks);
                Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
                IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());
                AlgorithmParameterSpec paramSpec = iv;
                cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec);
                return new String(cipher.doFinal(hex2byte(data.getBytes())));
            } catch (Exception e){
        		e.printStackTrace();
        		return data;
            }
        }
    
    	/**
    	 * 二行制转字符串
    	 * @param b
    	 * @return
    	 */
        private static String byte2hex(byte[] b) {
    		StringBuilder hs = new StringBuilder();
    		String stmp;
    		for (int n = 0; b!=null && n < b.length; n++) {
    			stmp = Integer.toHexString(b[n] & 0XFF);
    			if (stmp.length() == 1)
    				hs.append('0');
    			hs.append(stmp);
    		}
    		return hs.toString().toUpperCase();
    	}
        
        private 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);
    		    b2[n/2] = (byte)Integer.parseInt(item,16);
    		}
            return b2;
        }
        
    }
    
    @开源中国项目中摘取。

  • 相关阅读:
    数据库(六)
    数据库(五)
    数据库(四)
    数据库(三)
    数据库(二)
    数据库
    函数 枚举和递归
    数据类型(四) 集合
    数据库基础
    特殊集合 结构体
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4362175.html
Copyright © 2011-2022 走看看