목차
- 자바 AES 256 ECB 암호화 및 복호화 예제 이전 포스팅 참고 학습
- 자바 바이트 형태의 클래스를 클래스 타입으로 변환하여 로드하기 예제 이전 포스팅 참고 학습
- 자바 List 생성 및 아이템 추가, 삭제, 변경 예제 이전 포스팅 참고 학습
- 자바 AES 256 암호화된 클래스 바이트를 복호화하여 클래스 타입 변수에 저장 예제
자바 AES 256 ECB 암호화 및 복호화 예제 이전 포스팅 참고 학습
이전 포스팅에서는 AES (Advanced Encryption Standard) 256 ECB (Electronic Codebook) 모드로 직렬화된 클래스 바이트 값을 암호화하는 예제를 알아보았습니다. 정해진 키를 가지고 AES 암호화를 수행하였습니다. 오늘 예제는 이렇게 암호화된 바이트 HEX 문자열을 가지고 다시 AES 256 복호화하여 객체를 생성해보도록 하겠습니다. 아직 암호화 예제를 확인하지 않으셨다면 아래 링크를 확인해주세요.
2023.09.20 - [Java] - [Java/Linux] 자바 직렬화된 클래스 바이트를 AES 256 암호화하기(Class Encryption)
자바 바이트 형태의 클래스를 클래스 타입으로 변환하여 로드하기 예제 이전 포스팅 참고 학습
직렬화된 바이트 형태의 클래스를 다시 클래스 타입으로 변환하여 객체를 생성하는 예제를 이전 포스팅에서 알아보았습니다. 이를 위해서는 Java의 ClassLoader 클래스와 defineClass 메서드를 사용합니다. 오늘 예제에서는 클래스 자체를 직렬화하지는 않고 생성한 객체에 대해 직렬화하여 암호화한 것을 복호화하는 예제입니다. 만약 자바에서 클래스 직렬화 방법이 궁금하시다면 아래 링크를 참고해주세요.
2023.09.20 - [C] - [Java/Linux] 자바 직렬화된 바이트 형태의 클래스 타입으로 변환하여 로드하기(Bytes to Class)
자바 List 생성 및 아이템 추가, 삭제, 변경 예제 이전 포스팅 참고 학습
Java에서 List는 동적 배열의 형태로 데이터를 저장하는 자료 구조입니다. 이전 포스팅의 예제는 List를 생성하고 아이템을 추가, 삭제 및 변경하는 방법을 알려줍니다. 이를 위해서는 Java의 ArrayList 클래스 또는 LinkedList 클래스와 같은 컬렉션 클래스를 사용합니다. 만약 자바에서 List 아이템 생성, 추가, 삭제, 변경 등의 방법이 궁금하시다면 아래 링크를 참고해주세요.
2023.08.11 - [Java] - [Java/Linux] List 생성 및 아이템 추가, 삭제, 변경 예제
자바 AES 256 암호화된 클래스 바이트를 복호화하여 클래스 타입 변수에 저장 예제
아래는 AES 256 ECB 모드로 암호화된 클래스 바이트 배열을 복호화하고, 다시 클래스 객체로 변환하여 변수에 저장하는 예제입니다. 반드시 키가 암호화시에 사용한 키와 같아야합니다. 암호문은 이전 포스팅에서 다룬 암호문을 그대로 사용하겠습니다.
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;
public class DecryptionExample {
public static void main(String[] args) {
try {
// AES 256 비밀 키 생성 (암호화와 동일한 키여야 함)
byte[] keyBytes = "12345678901234567890123456789012".getBytes();
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
// AES 복호화 인스턴스 생성
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
// 암호화된 데이터 바이트 배열 (암호화 예제의 결과를 여기에 넣으세요)
byte[] encryptedData = hexStringToByteArray("A6A48B1FD91B796395F6F135C64A24A37D2DC2CD08B48BADAFDB6607F67916E1C42455AAAB613D16CB6162A75E2DCAC28AD9765155A8917465A62CB677017E54F4CE5DE8EB012D5804E13F9E13DECC1E");
// 복호화 수행
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println(decryptedData); // 복호화된 객체 출력
} catch (Exception e) {
e.printStackTrace();
}
}
// 16진수 문자열을 바이트 배열로 변환하는 유틸리티 함수
private static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i + 1), 16));
}
return data;
}
}