AES 대칭 암호화 및 암호 해독 코드는 참조를 위해 자세히 도입됩니다. 특정 내용은 다음과 같습니다
패키지 demo.security; import java.io.ioexception; import java.io.unsupportedencodingException; import java.security.invalidkeyException; import java.security.nosuchalgorithmexception; import java.security.securerand.base64; java.util.base64; javax.crypto.badpaddingException; import javax.crypto.cipher; import javax.crypto.illegalblocksizeexception; import javax.crypto.keygenerator; import javax.crypto.nosuchpaddingException; import javax.crypto.secretkey; Secretkey; javax.crypto.spec.secretkeyspec; import sun.misc.base64decoder; import sun.misc.base64encoder;/** aes 대칭 암호화 및 암호 해독*/public class symmetricencecoder {/** 암호화* 1. 주요 발전기 구성* 2. 키 * 4. 암호를 생성하고 초기화하십시오 * 5. 콘텐츠 암호화 * 6. 문자열 */public static string aesencode (문자열 인코딩, 문자열 내용) {try {// 1. AES 알고리즘으로 지정된 키 생성기를 구성하며 케이스에 민감하지 않은 키 게이너 keygen = keygenerator.getInstance ( "AES"); // 2. ecnoderules 규칙에 따라 키 생성기를 초기화하고 128 비트 랜덤 소스를 생성하고 전달 된 바이트 어레이 keygen.init (128, new securandom (encoderules.getBytes ())에 따라; // 3. 원래 대칭 키 비밀리키 원본 _key = keygen.generatekey ()를 생성합니다. // 4. 원래 대칭 키 바이트의 바이트 배열을 얻으십시오 [] raw = original_key.getencoded (); // 5. 바이트 어레이 비밀 키 키 = 새로운 비밀의 경우에서 AES 키를 생성합니다 (RAW, "AES"); // 6. 지정된 알고리즘 AES 자체 생성 암호화 Cipher Cipher = Cipher.getInstance ( "AES")에 따르면; // 7. 암호를 초기화하면 첫 번째 매개 변수는 암호화 (Encrypt_mode) 또는 암호 해독 및 암호 해독 (decrypt_mode) 작업이며, 두 번째 매개 변수는 주요 사용 된 cipher.init (cipher.encrypt_mode, key)입니다. // 8. 암호화 된 컨텐츠의 바이트 배열을 가져옵니다 (여기서 UTF-8로 설정해야 함). 그렇지 않으면, 내용에 혼합 된 중국어와 영어가있는 경우, 그것은 garbled 코드 byte [] byte_encode = content.getBytes ( "utf-8")로 해독됩니다. // 9. 암호의 초기화 방법에 따라-암호화 : 데이터 바이트 암호화 [] byte_aes = cipher.dofinal (byte_encode); // 10. 암호화 된 데이터를 문자열로 변환 // 패키지는 base64encoder에서 찾을 수 없습니다. 여기서 Solution : // 제거 먼저 프로젝트 빌드 경로에서 JRE 시스템 라이브러리를 제거한 다음 라이브러리 JRE 시스템 라이브러리를 추가하면 모든 것이 재 호환 후 잘됩니다. String aes_encode = new String (new base64encoder (). encode (byte_aes)); // 11. 문자열을 반환하여 aes_encode를 반환합니다. } catch (nosuchalgorithmexception e) {e.printstacktrace (); } catch (nosuchPaddingException e) {e.printstacktrace (); } catch (invalidkeyException e) {e.printstacktrace (); } catch (delegalBlocksizeexception e) {e.printstacktrace (); } catch (badpaddingException e) {e.printstacktrace (); } catch (UnsupportedEncodingException e) {e.printstacktrace (); } // 오류가 있으면 NULL 리턴 NULL을 추가하십시오. } /** 암호 해독 프로세스 :* 1. 동일한 암호화 단계 1-4* 2. 역전 된 문자열을 바이트 [] 배열로 돌리십시오* 3. 암호화 된 내용* /public static string aesdncode (문자열 인코딩, 문자열 내용) {// 1. 키 생성기를 구성하고 AES 알고리즘으로 지정하며, 사례에 민감한 keygenerator keygen = keygenerator.getInstance ( "AES"); // 2. ecnoderules 규칙에 따라 키 생성기를 초기화하고 128 비트 랜덤 소스를 생성하고 전달 된 바이트 어레이 keygen.init (128, new securandom (encoderules.getBytes ())에 따라; // 3. 원래 대칭 키 비밀리키 원본 _key = keygen.generatekey ()를 생성합니다. // 4. 원래 대칭 키 바이트의 바이트 배열을 얻으십시오 [] raw = original_key.getencoded (); // 5. 바이트 어레이 비밀 키 키 = 새로운 SecretKeyspec (RAW, "AES")를 기반으로 AES 키를 생성합니다. // 6. 지정된 알고리즘 AES 자체 형성 암호에 따르면 Cipher Cipher = Cipher.getInstance ( "AES"); // 7. 암호를 초기화하면 첫 번째 매개 변수는 암호화 (Encrypt_mode) 또는 Decrypt (decrypt_mode) 작동이며, 두 번째 매개 변수는 key cipher.init (cipher.decrypt_mode, key)입니다. // 8. 암호화 된 및 인코딩 된 컨텐츠를 바이트 배열 바이트 [] byte_content = new Base64decoder (). DecodeBuffer (Content)로 디코딩합니다. /** decrypt*/ byte [] byte_decode = cipher.dofinal (byte_content); 문자열 aes_decode = new String (byte_decode, "utf-8"); AES_DECODE를 반환합니다. } catch (nosuchalgorithmexception e) {e.printstacktrace (); } catch (nosuchPaddingException e) {e.printstacktrace (); } catch (invalidkeyException e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); } catch (delegalBlocksizeexception e) {e.printstacktrace (); } catch (badpaddingException e) {e.printstacktrace (); } // 오류가 있으면 NULL 리턴 NULL을 추가하십시오. } public static void main (String [] args) {symmetricencoder se = new Symmetricencoder (); 스캐너 스캐너 = 새 스캐너 (System.In); /** 암호화*/ system.out.println ( "AES 대칭 암호화 사용, 암호화 규칙을 입력하십시오"); 문자열 encoderules = scanner.next (); System.out.println ( "암호화 할 내용을 입력하십시오 :"); 문자열 content = scanner.next (); System.out.println ( "입력 규칙에 따라"+인코딩+"암호화 된 암호 텍스트는 다음과 같습니다. /** decrypt*/ system.out.println ( "AES 대칭 암호 해독 사용, 암호화 규칙을 입력하십시오 (암호화와 동일해야 함)"); encoderules = scanner.next (); System.out.println ( "해독 할 내용을 입력하십시오 (ciphertext) :"); content = scanner.next (); System.out.println ( "입력 규칙에 따라"+인코딩+"일반 텍스트는 다음과 같습니다."+se.aesdncode (인코딩, 내용)); }} 테스트 결과 :
AES 대칭 암호화를 사용하십시오. 암호화 규칙을 입력하십시오. AES 대칭 암호화를 사용하십시오. 암호화 할 내용을 입력하십시오 :
AES 대칭 암호화 사용 암호화 된 암호 텍스트는 다음과 같습니다
AES 대칭 암호 해독 사용, 암호화 규칙을 입력하십시오 : (암호화와 동일해야합니다)
AES 대칭 암호화를 사용하여 컨텐츠를 입력하십시오 (ciphertext) :
Z0NWRNPHGHGXHN0CQJLS58YCJHMCBFER33RWS7LW+AY =
입력 규칙에 따라 AES 대칭 암호화를 사용하여 해독 된 일반 텍스트는 다음과 같습니다. AES 대칭 암호화 사용
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.