- 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");