Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

AES 암호화 알고리즘 GUI

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 이상

설치 및 실행

1. 프로젝트 클론

cd "AES 알고리즘/AES/AESGUI"

2. Maven 빌드

mvn clean compile

3. 실행

mvn exec:java

또는

mvn clean package
java -jar target/aes-gui-1.0.0.jar

사용 방법

기본 사용법

  1. Input 입력: 4x4 행렬에 평문(암호화) 또는 암호문(복호화)을 16진수로 입력

    • 예: 54, 08, ab, 93 ...
  2. Cipher Key 입력: 4x4 행렬에 128비트 키를 16진수로 입력

    • 예: 2b, 28, ab, 09 ...
  3. 모드 선택:

    • 암호화: 평문 → 암호문
    • 복호화: 암호문 → 평문
  4. Start 버튼 클릭: 암호화/복호화 실행 및 과정 시각화

  5. 결과 확인:

    • Output 패널에서 최종 결과 확인
    • 중앙 패널에서 각 라운드별 중간 과정 확인

입력 예시

평문 (Input)

54 08 ab 93
18 82 ff 93
bd 66 bc 73
16 da 2b 5d

키 (Cipher Key)

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          # 테스트 파일

알고리즘 구현 상세

1. SubBytes 변환

  • GF(2^8) 역원 계산: Extended Euclidean Algorithm 사용
  • Affine 변환:
    • 암호화: b=31, c=99
    • 복호화: b=74, c=5

2. ShiftRows 변환

  • 각 행을 순환 시프트
  • 암호화: 왼쪽 시프트
  • 복호화: 오른쪽 시프트

3. MixColumns 변환

  • 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]

4. 키 스케줄링

  • 10개의 라운드 키 생성
  • Rcon (Round Constant) 사용
  • SubBytes 및 RotWord 적용

AES 암호화 프로세스

암호화 (10 라운드)

  1. Initial Round: AddRoundKey
  2. Round 1-9:
    • SubBytes
    • ShiftRows
    • MixColumns
    • AddRoundKey
  3. Round 10:
    • SubBytes
    • ShiftRows
    • AddRoundKey (MixColumns 제외)

복호화 (역순)

  1. Initial: AddRoundKey
  2. Round 9-1:
    • InvSubBytes
    • InvShiftRows
    • InvMixColumns
    • AddRoundKey
  3. Round 0:
    • InvSubBytes
    • InvShiftRows
    • AddRoundKey

기술 스택

  • 언어: Java 21
  • 빌드 도구: Maven
  • GUI: Java Swing
  • 인코딩: UTF-8

교육적 가치

이 프로젝트는 다음과 같은 학습에 유용합니다:

  • AES 알고리즘의 각 단계 이해
  • 갈루아 필드(GF) 연산 학습
  • 블록 암호화 알고리즘 구조 파악
  • 암호학 이론의 실제 구현 확인

주의사항

이 프로젝트는 교육 목적으로 제작되었습니다. 실제 프로덕션 환경에서는 검증된 암호화 라이브러리(예: Java Cryptography Extension)를 사용하시기 바랍니다.

라이선스

이 프로젝트는 교육용으로 제작되었습니다.

참고 자료

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages