AES(Advanced Encryption Standard)는 대칭키 방식으로 가장 널리 쓰이는 블록 암호입니다.
아래 폼을 이용해서 브라우저에서 바로 AES 암호화/복호화를 테스트해 볼 수 있습니다.
1. 사용 방법
- 동작 선택
- Encrypt: 평문(Plain Text)을 암호문으로 변환
- Decrypt: 암호문을 평문으로 복원
- Cipher Mode 선택 (ECB / CBC / CTR)
- ECB
- 가장 단순한 모드, IV(Initialization Vector)를 사용하지 않습니다.
- 동일한 블록이 항상 동일한 암호문이 되기 때문에 보안상 권장되지는 않습니다.
- CBC
- 가장 많이 쓰이는 블록 모드 중 하나입니다.
- 16바이트(128bit) 길이의 IV가 필요하며, 같은 평문이라도 IV에 따라 다른 암호문이 나옵니다.
- CTR
- 블록 암호를 스트림처럼 사용하는 모드입니다.
- 병렬 처리가 가능하고, IV(논스)를 적절히 관리하면 안전하게 사용할 수 있습니다.
- Padding 방식 선택
- PKCS5Padding
- 블록 크기(16바이트)에 맞추기 위해 부족한 부분을 패딩 바이트로 채우는 일반적인 방식입니다.
- NoPadding
- 패딩을 하지 않습니다.
- 이 모드를 사용할 때는 입력 데이터 길이가 반드시 16바이트의 배수가 되어야 하며, 그렇지 않으면 오류가 발생할 수 있습니다.
- Key Size 선택 (128 / 192 / 256 bit)
- AES는 128bit 블록 크기를 사용하며, 키 길이는 128/192/256bit를 지원합니다.
- 이 예제에서는 문자열 키를 입력하면 내부적으로
- 지정한 길이(16/24/32바이트)를 기준으로 잘라서 사용하거나
- 부족할 경우
0x00으로 채워서 사용합니다.
- IV(Initialization Vector)
- ECB 모드에서는 사용되지 않습니다.
- CBC / CTR 모드에서는 16바이트 길이의 IV 사용을 권장합니다.
- 이 예제에서는 IV 입력이 비어 있는 경우, 0으로 채워진 IV를 사용합니다.
- 실제 서비스에서는 IV를 랜덤하게 생성하고, 필요하다면 암호문과 함께 저장/전달하는 패턴을 많이 사용합니다.
- 암호문 포맷 선택 (Base64 / Hex)
- Base64: 텍스트로 다루기 쉬워서 많이 사용되는 인코딩 방식입니다.
- Hex: 바이너리 데이터를 16진수 문자열로 표현합니다.
- 이 예제에서는
- 암호화 시: 선택한 포맷으로 결과를 출력하고
- 복호화 시: 입력 암호문이 해당 포맷(Base64 또는 Hex)이라고 가정하고 디코딩합니다.
2. AES 테스트 폼
아래 폼에 값을 입력한 뒤, Encrypt / Decrypt를 선택하고 “실행하기” 버튼을 눌러 결과를 확인해 보세요.
AES Encryption / Decryption Tool
3. 다른 언어와 결과 맞춰보기
이 글에서 사용하는 AES 설정은 다음과 같습니다.
- 알고리즘: AES
- Key Size: 128 / 192 / 256 bit
- 모드: ECB / CBC / CTR (PHP OpenSSL 기준)
- 패딩: PKCS5Padding 또는 NoPadding
- 암호문 포맷: Base64 또는 Hex
Python, Java, Node.js 등에서 동일한 모드/키/IV/패딩을 맞추면
서로 호환되는 암호화/복호화 결과를 얻을 수 있습니다.
실제로 테스트할 때는 다음을 반드시 통일해야 합니다.
- Key Size (128/192/256bit)
- Cipher Mode (예: AES/CBC/PKCS5Padding)
- IV 값
- 입력/출력 포맷 (Base64 or Hex)