728x90
package javatest;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher; //암호화 복호화 기능을 제공하는 Cipher 클래스
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
public class Main {
//암호화 : 평문을 암호문으로 변환
//복호화 : 암호문을 평문으로 변환
//여기서 plaintext라고 불리는 메세지는 암호화 알고리즘을 통해 암호화되어 cyphertext를 생성한다. cyphertext는 복호화를 통해 오직 권한이 있는 사용자만 읽을 수 있다.
public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
// 암호화 키를 생성합니다.
String key = "This is my secret key";
byte[] keyBytes = key.getBytes("UTF-8");
// 암호화 키의 길이를 16바이트로 설정합니다.
keyBytes = Arrays.copyOf(keyBytes, 16);
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
// 암호화기를 생성합니다.
//Cipher먼저 클래스의 새 인스턴스를 만들어야 합니다. getInstance()메소드 를 호출하여 이를 수행할 수 있습니다
//getInstance()메서드는 암호화 알고리즘의 이름과 공급자라는 두 가지 매개 변수를 사용합니다. (공급자: 암호화 알고리즘을 구현하는 소프트웨어 라이브러리)
Cipher cipher = Cipher.getInstance("AES");
// 암호화기를 암호화 모드로 초기화합니다.
// init(int mode, Key key): 암호화 또는 복호화를 위한 암호를 초기화합니다.
//init()메서드는 모드, 암호화 키, 알고리즘 매개변수라는 세 가지 매개변수를 사용합니다.
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
// 문자열을 암호화합니다.
// doFinal(byte[] input) 지정된 데이터를 암호화하거나 해독합니다.
String input = "b의개발공부";
byte[] encryptedBytes = cipher.doFinal(input.getBytes());
// 암호화된 문자열을 출력합니다.
System.out.println(new String(encryptedBytes, "UTF-8"));
//* 출력결과
//e2d376126254a3a0f02d357922147839
}
//+ update(byte[] input, int offset, int len): 지정된 데이터의 일부를 암호화하거나 해독합니다.
}
package javatest;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher; //복호화 기능을 제공하는 Cipher 클래스
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
public class Main {
public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
// 암호화 키를 생성합니다.
String key = "This is my secret key";
byte[] keyBytes = key.getBytes("UTF-8");
// 암호화 키의 길이를 16바이트로 설정합니다.
keyBytes = Arrays.copyOf(keyBytes, 16);
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
// 암호화기를 생성합니다.
Cipher cipher = Cipher.getInstance("AES/OAEP/PKCS5Padding"); //Java 암호화 라이브러리가 시스템에 설치
// 암호화기를 복호화 모드로 초기화합니다.
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
// 암호화된 문자열을 복호화합니다.
byte[] encryptedBytes = "e2d376126254a3a0f02d357922147839".getBytes();
String decryptedString = new String(cipher.doFinal(encryptedBytes), "UTF-8");
// 복호화된 문자열을 출력합니다.
System.out.println(decryptedString);
//* 출력결과
//b의개발공부
}
}
728x90
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] 서버 CPU, MEMORY, DISK, IP 조회 방법 정리 (0) | 2023.09.19 |
---|---|
[JAVA] 연산자 · 연산자우선순위 (0) | 2023.09.18 |
[JAVA] 운영체제 경로 구분자 System.getProperty() (0) | 2023.08.24 |
[JAVA] 날짜와 시간 구하는 방법 (JDK 1.8 이상) (0) | 2023.08.09 |
[JAVA] split() 문자열 잘라서 배열로 반환 (0) | 2023.07.18 |