자바 암호화 및 복호화 알고리즘 --des

  • ECB
sun.misc.BASE64Decoder 오기; 

javax.crypto의 * ;. 가져 
오기 javax.crypto.spec.DESKeySpec; 
오기 때 java.io.IOException; 
오기 java.security.InvalidKeyException; 
오기를 java.security.Key; 
오기 java.security.NoSuchAlgorithmException ; 
오기 java.security.spec.InvalidKeySpecException는; 

Public 클래스 암호화 { 

    공공 정적 바이트 [] initSecretKey는 () {경우 NoSuchAlgorithmException를 발생 
        // 지정된 키 생성 알고리즘은 
        의 KeyGenerator kg = KeyGenerator.getInstance ( "DES"); 
        // 초기화 키 발전기, 비밀 키 사이즈를 갖는 것으로 판정 
        kg.init를 (56 임); 
        // 비밀 키를 생성 
        의 SecretKey kg.generateKey의 SecretKey = (), 
        창 (secretkey.getEncoded) 
    }

    정적 바이트 공개 []를 암호화 (바이트 [] 키의 src 문자열)는 InvalidKeyException, 예외 : NoSuchAlgorithmException, InvalidKeySpecException를하는 NoSuchPaddingException, 않고 BadPaddingException, 않고 IllegalBlockSizeException를 throw { 
        // 초기화 키 JDK 데 변환 키 
        는 DESKeySpec는 DESKeySpec = 새로운 새로운는 DESKeySpec (키) 
        만들기 // 식물 키로서는 
        의 SecretKeyFactory의 SecretKeyFactory = SecretKeyFactory.getInstance ( "DES"); 
        // 비밀 키 생성 
        비밀 키의 비밀 키 = SecretKeyFactory.generateSecret (DESKeySpec의가) 

        / ** 
         * 실제 암호화 암호 
         * / 
        // Cipher 오브젝트를 생성 
        암호 암호화 = 암호문 .getInstance ( "DES / ECB / PKCS5Padding에"); 
        // Cipher에 초기화
        cipher.init (Cipher.ENCRYPT_MODE, 비밀 키); 
        바이트 []의 EncryptedData = 암호화 (비밀 키, STR);
        바이트 [] = src.getBytes 데이터 (); 
        //加密
        바이트 []의 EncryptedData cipher.doFinal = (데이터); 

    } 

    공공 정적 무효 메인 (문자열 []에 인수) 경우 NoSuchAlgorithmException, 않고 IllegalBlockSizeException, NoSuchPaddingException, 않고 BadPaddingException, InvalidKeySpecException를,는 InvalidKeyException, 공개 IOException { 
        // 바이트 [] = initSecretKey 비밀 키 (); 
        //或者代码中约定키 
        문자열 키 = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4"; 
        바이트 [] = 새로운 비밀 키 BASE64Decoder () decodeBuffer (키).; 
        문자열 STR = "ABC"; 
        문자열 decrypteData = 해독 (비밀 키,의 EncryptedData); 
    }
 
    공공 정적 문자열 복호화 (바이트 [] 키 바이트 []의 EncryptedData)의 경우 InvalidKeyException, 경우 NoSuchAlgorithmException, InvalidKeySpecException를하는 NoSuchPaddingException, 않고 BadPaddingException, 않고 IllegalBlockSizeException을 발생 { 
        // 초기화 키 JDK DES 변환 키 
        는 DESKeySpec는 DESKeySpec DESKeySpec의 새로운 새 = (키); 
        // 키를 팩토리 인스턴스를 생성 
        의 SecretKeyFactory의 SecretKeyFactory = SecretKeyFactory.getInstance ( "DES는"); 
        //이 비밀 키 생성 
        의 비밀의 비밀 = SecretKeyFactory.generateSecret (는 DESKeySpec); 

        / ** 
         * 암호 해독 연습 사이퍼를 
         * / 
        // 객체 암호화하는 생성 
        암호 암호화 = Cipher.getInstance ( "DES는 / ECB / PKCS5Padding에를");
        //初始化암호화 된 
        cipher.init (cipher를 Cipher.DECRYPT_MODE, 비밀 키); 
        // 암호화
        바이트 [] = dencryptedData cipher.doFinal (의 EncryptedData); 
        새로운 String (dencryptedData)을 반환; 
    } 
}
  • CBC

유럽 ​​중앙 은행의 차이, 암호화 및 초기화 벡터를 사용해야 암호 해독, 일관된 초기화 벡터

sun.misc.BASE64Decoder 오기; 

javax.crypto의 * ;. 가져 
오기 javax.crypto.spec.DESKeySpec; 
오기 javax.crypto.spec.IvParameterSpec; 
오기 때 java.io.IOException; 
오기 java.security.InvalidAlgorithmParameterException; 
가져 java.security .InvalidKeyException; 
오기를 java.security.Key; 
오기 java.security.NoSuchAlgorithmException; 
오기 java.security.spec.InvalidKeySpecException는; 

Public 클래스 암호화 { 

    공공 정적 바이트 [] initSecretKey ()는 슬로우 경우 NoSuchAlgorithmException { 
        // 지정된 비밀 키 발생 알고리즘 
        의 KeyGenerator = KeyGenerator.getInstance kg ( "DES"); 
        //이 비밀 키 생성기는, 비밀 키 사이즈를 갖는 것으로 판정 초기화 
        kg.init (56); 
        // 비밀 키를 생성
        의 SecretKey = kg.generateKey의 SecretKey (); 
        복귀 secretkey.getEncoded (); 
    } 

    공공 정적 바이트 [] 암호화 (바이트 [] 키 SRC 문자열 바이트 [] keyIv)의 경우 InvalidKeyException, 경우 NoSuchAlgorithmException, InvalidKeySpecException를하는 NoSuchPaddingException, 않고 BadPaddingException {않고 IllegalBlockSizeException를 슬로우 
        // JDK 초기화 키 비밀 키 변환 DES 
        는 DESKeySpec는 DESKeySpec 새로운 새로운는 DESKeySpec (키) =; 
        // 키를 팩토리 인스턴스 생성 
        하며의 SecretKeyFactory의 SecretKeyFactory = SecretKeyFactory.getInstance ( "DES") 
        // 개인 키 
        (비밀 키의 비밀 = secretKeyFactory.generateSecret을 는 DESKeySpec) 

        / ** 
         * 암호화 연습 Cipher에 
         * / 
        // 생성 암호 객체
        암호화 암호 = Cipher.getInstance ( "DES / CBC / PKCS5Padding에"); 
        //创建初始化向量
        IvParameterSpec의 정맥 = IvParameterSpec의 새로운 (keyIv); 
        //初始化암호화 된 
        cipher.init (Cipher.ENCRYPT_MODE, 비밀 키, IV); 
        바이트 [] = src.getBytes 데이터 (); 
        //加密
        바이트 []의 EncryptedData cipher.doFinal = (데이터); 

    } 

    공공 정적 무효 메인 (문자열 []에 인수) 경우 NoSuchAlgorithmException, 않고 IllegalBlockSizeException, NoSuchPaddingException, 않고 BadPaddingException, InvalidKeySpecException를,는 InvalidKeyException IOException을,는 InvalidAlgorithmParameterException를 슬로우 { 
        // 바이트 [] = initSecretKey 비밀 키 (); 
        //或者代码中约定키
        문자열 키 = "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4";
        바이트 [] = 새로운 비밀 키 BASE64Decoder () decodeBuffer (키).; 
        바이트 [] IV = {1, 2, 3, 4, 5, 6, 7, 8}; 
        문자열 STR = "ABC"; 
        바이트 []의 EncryptedData = 암호화 (비밀 키, STR, IV); 
        문자열 decrypteData = 복호화 (비밀 키,의 EncryptedData, IV); 
    } 

    공공 정적 문자열 복호화 (바이트 [] 키 바이트 []의 EncryptedData는 바이트 [] keyIv) 슬로우는 InvalidKeyException, 경우 NoSuchAlgorithmException, InvalidKeySpecException를, NoSuchPaddingException, 않고 BadPaddingException, 않고 IllegalBlockSizeException, InvalidAlgorithmParameterException가 { 
        // JDK初始化秘钥转化DES秘钥
        는 DESKeySpec는 DESKeySpec = 새로운 는 DESKeySpec (키); 
        //创建秘钥工厂实例
        의 SecretKeyFactory의 SecretKeyFactory = SecretKeyFactory.getInstance ( "DES"); 
        //生成秘钥
        의 SecretKey = SecretKeyFactory.generateSecret의 SecretKey (는 DESKeySpec); 

        / ** 
         * 암호 해독 연습 암호 
         * / 
        // 암호 객체 생성 
        암호 암호 = Cipher.getInstance ( "DES / CBC / PKCS5Padding에"); 
        // 초기화 벡터 만들기 
        IvParameterSpec의 정맥을 = 새로운 IvParameterSpec의 (keyIv) 
        // 사이퍼의 초기화 
        cipher.init을 (cipher를 Cipher.DECRYPT_MODE, 비밀 키, IV); 
        // 암호화 
        바이트 [] = dencryptedData Cipher.doFinal (의 EncryptedData) 
        새로운 새 문자열을 리턴 (dencryptedData); 
    } 
}

DES와 같은 동작 모드 및 채우기 모드, 암호화 및 암호 해독과 유사한 3DES는 차이가 있습니다 :

  • JDK 초기화 키 변환 DES 키

  의 :

DESKeySpec의 DESKeySpec의 새로운는 DESKeySpec (키) =;

  3DES :

DESedeKeySpec의 사양 = DESedeKeySpec의 새로운 (키);
  • 비밀 열쇠 팩토리의 인스턴스를 생성  

  의 :

의 SecretKeyFactory의 SecretKeyFactory = SecretKeyFactory.getInstance ( "DES");

  3DES :

KeyFactory에 SecretKeyFactory.getInstance의 SecretKeyFactory = ( "desede");

  

추천

출처www.cnblogs.com/ivy-xu/p/12297194.html