나도 공대생

[과제] AES Decrypt Program 본문

공부/정보보호개론

[과제] AES Decrypt Program

herbssssst 2024. 5. 23. 20:05

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