基于java类库的DES加密算法源码

import java.security.*; 
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.crypto.Cipher; 
import javax.crypto.SecretKey; 
import javax.crypto.SecretKeyFactory; 
import javax.crypto.spec.DESKeySpec; 

/** 
 * SSO加密算法样例
 */ 
public class SecurityTest { 

	
//请使用系统中的正式密钥修改这里
private static final String PASSWORD_CRYPT_KEY = "DC7726190BFD4E76"; 
private final static String DES = "DES"; 

/** 
 * 加密 
 * @param src 数据源 
 * @param key 密钥,长度必须是8的倍数 
 * @return   返回加密后的数据 
 * @throws Exception 
 */ 
public static byte[] encrypt(byte[] src, byte[] key)throws Exception { 
                //DES算法要求有一个可信任的随机数源 
                SecureRandom sr = new SecureRandom(); 
                // 从原始密匙数据创建DESKeySpec对象 
                DESKeySpec dks = new DESKeySpec(key); 
                // 创建一个密匙工厂,然后用它把DESKeySpec转换成 
                // 一个SecretKey对象 
                SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES); 
                SecretKey securekey = keyFactory.generateSecret(dks); 
                // Cipher对象实际完成加密操作 
                Cipher cipher = Cipher.getInstance(DES); 
                // 用密匙初始化Cipher对象 
                cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); 
                // 现在,获取数据并加密 
                // 正式执行加密操作 
                return cipher.doFinal(src); 
         } 

     
    /** 
     * 用户名加密 
     * @param password 
     * @return 
     * @throws Exception 
     */ 
    public final static String encrypt(String password){ 
        try { 
            return byte2hex(encrypt(password.getBytes(),PASSWORD_CRYPT_KEY.getBytes())); 
        }catch(Exception e) { 
        } 
        return null; 
    } 
/** 
 * 二进制转字符串 
 * @param b 
 * @return 
 */ 
    public static String byte2hex(byte[] b) { 
                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); 
                    b2[n/2] = (byte)Integer.parseInt(item,16); 
                } 
       return b2; 
    } 

    public static void main(String[] args) {
    	//当前时间
    	String  in_date=new SimpleDateFormat ("yyyyMMddHH").format(new Date());
    	//原始用户名
    	String username="[email protected]";
    	//用户名与时间拼接
    	username =username+"::"+in_date;
        System.out.println("解密前="+username);
        //加密
        String data = encrypt(username);
        //输出加密字符串
        System.out.println("加密后="+data); 
    } 
} 

发布了39 篇原创文章 · 获赞 157 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_34417749/article/details/88757607
今日推荐