일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OSI7
- IP스푸핑
- 네트워크해킹과보안
- 4-way handshake
- 암호학
- 보안부트캠프
- ICMP리다이렉트
- 암호문
- tcp세션하이재킹
- 합격후기
- 복호화
- 스위치재밍
- 보안
- 정보보호개론
- 목록화
- 네트워크보안
- 네트워크
- 정처기
- 컴퓨터공학
- 3-way handshake
- 세션하이재킹
- k-shield주니어
- 케이쉴드주니어
- 네트워크해킹
- 단순치환암호
- caesar's cipher
- ARP리다이렉트
- 케쉴주
- 자격증
- SQL개발자
- 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.
참고
자바 BASE64 인코딩 디코딩하기
BASE64 인코딩 디코딩하기개발하면서 Base64에 대해 쓰는건 알고 있지만 왜 쓰는지 감을 못잡았기에 BASE64에 대한 개념을 포스팅 한 적이 있었습니다. 개념에 대해 알고 싶으시면 http://ktko.tistory.com/1
ktko.tistory.com
JAVA에서의 암호화 방법 (AES)
암호화, 복호화 기능을 제공대칭키 알고리즘혼돈(confusion)암호문으로부터 키를 알아낼 수 없게 하는 성질키의 비트 하나만 바꿔도 암호문 전체가 바뀌도록 하는 성질확산(diffusion)암호문으로부
velog.io
'공부 > 정보보호개론' 카테고리의 다른 글
[과제] RSA Decryption (1) | 2024.06.02 |
---|---|
[과제] Substitution Cihper Decrypt (0) | 2024.05.21 |