Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 정처기
- 네트워크
- 복호화
- SQL개발자
- 케쉴주
- 3-way handshake
- 네트워크해킹과보안
- OSI7
- 암호문
- IP스푸핑
- 세션하이재킹
- 단순치환암호
- 합격후기
- 4-way handshake
- 네트워크보안
- 네트워크해킹
- ARP리다이렉트
- 자격증
- 케이쉴드주니어
- 보안부트캠프
- 정보보호개론
- 보안
- ICMP리다이렉트
- 목록화
- k-shield주니어
- caesar's cipher
- 암호학
- tcp세션하이재킹
- 스위치재밍
- 컴퓨터공학
Archives
- Today
- Total
나도 공대생
[과제] AES Decrypt Program 본문
AES 알고리즘
56비트인 키 길이가 전수키 조사에 취약하다는 DES가 가진 가장 결정적인 문제를 대체하기 위해 등장하였다.
AES 알고리즘은 블록 크기가 128비트이며, 128/192/256 비트의 키를 사용할 수 있다. AES는 DES처럼 블록암호지만 파이스텔 암호가 아니다.
AES를 복호화하려면 AES의 연산과정을 거꾸로 수행할 수 있어야 한다.
문제
JAVA를 이용해 AES 복호화 프로그램을 만드는 문제로, 기본적으로 주어진 정보를 이용해 평문을 구하면 된다. 주어진 정보는 다음과 같다.
1. 각 값들은 BASE64로 인코딩 되어 제공
key | 8iE3bf1se6N76HGPP8S0Xw== |
IV | cHml3oX848/0uBwDJtChOA== |
C | QDr9NZNG9Bgc3TTnfRuqjjzf/kVSYwbP7F9mR4GQZ/IneIh7HTc/xnwzEeVBcH3pPlIbLFySKZruedJc9X87CGNDJ1f2Dat8BR3Ypbei5Q42xc306/AkSuGsjfqbX9/ELxmdKn7MyvY/Jbc0v0AJHV6odgNzygKRRrFJcUIF/50= |
2. AES/CBC/PKCS5PADDING 암호화모드를 사용
풀이
Base64 인코딩 및 디코딩 방법은 다음과 같다.
import java.util.Base64;
import java.util.Base64.Decoder;
class Decoding{
public void run(){
String key = "8iE3bf1se6N76HGPP8S0Xw==";
String IV = "cHml3oX848/0uBwDJtChOA==";
String c = "QDr9NZNG9Bgc3TTnfRuqjjzf/kVSYwbP7F9mR4GQZ/IneIh7HTc/xnwzEeVBcH3pPlIbLFySKZruedJc9X87CGNDJ1f2Dat8BR3Ypbei5Q42xc306/AkSuGsjfqbX9/ELxmdKn7MyvY/Jbc0v0AJHV6odgNzygKRRrFJcUIF/50=";
//key, IV, C의 바이트 값을 가져오기
byte[] byteKey = key.getBytes();
byte[] byteIV = IV.getBytes();
byte[] byteC = c.getBytes();
//key, IV, C 바이트값을 디코딩하기
byte[] decodedByteKey = Based64Decode(byteKey);
byte[] decodedByteIv = Based64Decode(byteIV);
byte[] decodedByteC = Based64Decode(byteC);
}
//Based64 Decode 메소드
public byte[] Based64Decode(byte[] bytes){
Decoder decoder = Base64.getDecoder();
byte[] decodedBytes = decoder.decode(bytes);
return decodedBytes;
}
}
AES/CBC/PKCS5 PADDING 암호화 방법은 다음과 같다.
1.Cipher 객체 이스턴스화
//C 객체를 AES 알고리즘으로 암호화 & CBC operation mode & PKCS5 padding scheme로 초기화 (모드 설정)
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
2. Keys 세팅
//사용할 key 생성
SecretKey secretKey = new SecretKeySpec(decodedByteKey, "AES");
3. IV 생성
//사용할 IV 생성
IvParameterSpec ivParamSpec = new IvParameterSpec(iv.getBytes());
4. Cihper 초기화
//Cipher에 모드, key랑 IV 넣고 초기화
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParamSpec);
5. 복호화
String decodedText = new String(cipher.doFinal(decodedByteC));
결과
AES 프로그램으로 복호화한 결과 다음과 같은 결과가 나왔다.
Hello world of AES encryption. A secret between two is a secret of God;
a secret among three is everybody's secret.
참고
'공부 > 정보보호개론' 카테고리의 다른 글
[과제] RSA Decryption (1) | 2024.06.02 |
---|---|
[과제] Substitution Cihper Decrypt (0) | 2024.05.21 |