java加解密之3重DES
阿新 • • 發佈:2019-02-03
單重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")); }
}