1. 程式人生 > >java加解密之3重DES

java加解密之3重DES

單重DES加密較容易破解,為了提高安全性,3重DES加密就是在單重的基礎上衍生出來的,一般3重DES用的比較頻繁。加密過程為加密-解密-加密。
我一直想找用自己定義金鑰的方法來做程式,網上找了很多都找不到,單重倒是有很多,因此只能自己研究研究了,現在拿出來給各位做java的分享
分享,希望各位喜歡。
/**
 * 3重DES加密
 * @param src
* @param DES_KEY 金鑰長度不少於24的倍數位
* @return
*/
public static String EncryptBy3DES(String src,String DES_KEY){
    String result=null
; try { SecureRandom secureRandom=new SecureRandom(); DESedeKeySpec sedeKeySpec=new DESedeKeySpec(DES_KEY.getBytes()); SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("DESede"); SecretKey key=secretKeyFactory.generateSecret(sedeKeySpec); Cipher cipher=Cipher.getInstance
("DESede/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE,key,secureRandom); byte[] bytesresult=cipher.doFinal(src.getBytes()); result=new sun.misc.BASE64Encoder().encode(bytesresult); } catch (Exception e) { e.printStackTrace(); } return result; }
/**
* 3重DES解密 * @param src * @param DES_KEY * @return */
public static String decryptBy3DES(String src,String DES_KEY){
    String deresult=null;
    try {
        SecureRandom secureRandom=new SecureRandom();
        DESedeKeySpec sedeKeySpec=new DESedeKeySpec(DES_KEY.getBytes());

        SecretKeyFactory secretKeyFactory=SecretKeyFactory.getInstance("DESede");
        SecretKey key = secretKeyFactory.generateSecret(sedeKeySpec);

        Cipher cipher=Cipher.getInstance("DESede/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE,key,secureRandom);

        byte[] bytesresult=cipher.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(src));
        deresult=new String(bytesresult);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return deresult;
}
測試:
public class DES_3 {
    //定義一個要加密的字串
    private static String src="imooc security 3des";


    public static void main(String[] args) {
       //呼叫加密的方法並列印檢視結果   
System.out.println(EncryptBy3DES(src,"123456781234567812345678"));
//將加密後的結果放入解密的方法,由於是對稱加密,因此加解密的金鑰都是同一個 System.out.println(decryptBy3DES("lA/dMJvyrb2Q/BtmUKPPEdNwn5+TwCxA","123456781234567812345678")); }
}