AES (Advanced Encryption Standard) 암호화 알고리즘을 Java Swing으로 구현한 교육용 애플리케이션입니다.
이 프로젝트는 AES-128 암호화 알고리즘의 각 단계를 시각화하여 보여주는 GUI 애플리케이션입니다. 암호화 및 복호화 과정의 모든 라운드와 중간 단계를 실시간으로 확인할 수 있어 암호학 학습에 최적화되어 있습니다.
- AES-128 암호화/복호화: 128비트 키를 사용한 완전한 AES 구현
- 실시간 시각화: 10개 라운드의 모든 중간 과정 표시
- Start of Round
- After SubBytes
- After ShiftRows
- After MixColumns
- Round Key
- 양방향 지원: 암호화와 복호화 모드 전환 가능
- 16진수 입력: 평문/암호문 및 키를 16진수 형태로 입력
- Java 21 이상
- Maven 3.6 이상
cd "AES 알고리즘/AES/AESGUI"mvn clean compilemvn exec:java또는
mvn clean package
java -jar target/aes-gui-1.0.0.jar-
Input 입력: 4x4 행렬에 평문(암호화) 또는 암호문(복호화)을 16진수로 입력
- 예:
54,08,ab,93...
- 예:
-
Cipher Key 입력: 4x4 행렬에 128비트 키를 16진수로 입력
- 예:
2b,28,ab,09...
- 예:
-
모드 선택:
- 암호화: 평문 → 암호문
- 복호화: 암호문 → 평문
-
Start 버튼 클릭: 암호화/복호화 실행 및 과정 시각화
-
결과 확인:
- Output 패널에서 최종 결과 확인
- 중앙 패널에서 각 라운드별 중간 과정 확인
54 08 ab 93
18 82 ff 93
bd 66 bc 73
16 da 2b 5d
2b 28 ab 09
7e ae f7 cf
15 d2 15 4f
16 a6 88 3c
AES/AESGUI/
├── pom.xml # Maven 설정 파일
└── src/
├── Main.java # GUI 및 메인 로직
├── SubByte.java # SubBytes 변환 (GF 역원, Affine 변환)
├── Key.java # 키 스케줄링 (확장, Rcon)
├── ShiftsRows.java # ShiftRows 변환
├── Mixcolumn.java # MixColumns 변환 (GF 행렬 곱셈)
└── test.java # 테스트 파일
- GF(2^8) 역원 계산: Extended Euclidean Algorithm 사용
- Affine 변환:
- 암호화: b=31, c=99
- 복호화: b=74, c=5
- 각 행을 순환 시프트
- 암호화: 왼쪽 시프트
- 복호화: 오른쪽 시프트
- GF(2^8)에서의 행렬 곱셈
- 암호화 행렬:
[2,3,1,1], [1,2,3,1], [1,1,2,3], [3,1,1,2] - 복호화 행렬:
[14,11,13,9], [9,14,11,13], [13,9,14,11], [11,13,9,14]
- 10개의 라운드 키 생성
- Rcon (Round Constant) 사용
- SubBytes 및 RotWord 적용
- Initial Round: AddRoundKey
- Round 1-9:
- SubBytes
- ShiftRows
- MixColumns
- AddRoundKey
- Round 10:
- SubBytes
- ShiftRows
- AddRoundKey (MixColumns 제외)
- Initial: AddRoundKey
- Round 9-1:
- InvSubBytes
- InvShiftRows
- InvMixColumns
- AddRoundKey
- Round 0:
- InvSubBytes
- InvShiftRows
- AddRoundKey
- 언어: Java 21
- 빌드 도구: Maven
- GUI: Java Swing
- 인코딩: UTF-8
이 프로젝트는 다음과 같은 학습에 유용합니다:
- AES 알고리즘의 각 단계 이해
- 갈루아 필드(GF) 연산 학습
- 블록 암호화 알고리즘 구조 파악
- 암호학 이론의 실제 구현 확인
이 프로젝트는 교육 목적으로 제작되었습니다. 실제 프로덕션 환경에서는 검증된 암호화 라이브러리(예: Java Cryptography Extension)를 사용하시기 바랍니다.
이 프로젝트는 교육용으로 제작되었습니다.