반응형
서론
서비스에서 활용하는 Redirect Page를 점검하던 도중 특정 Params에서 데이터를 파싱해오지 못하는 이슈를 발견했다.
영문, 숫자, = 포함 문자는 문제가 없었으나 AES 암호화에서 + 특수문자가 포함될 경우 발생하는 원인을 분석하였다.
AES256
- 대칭키 암호화 알고리즘
- 256비트 길이의 비밀키를 사용하여 데이터를 블록 단위(128비트)로 암호화
- 고도의 보안성을 제공하며, 고정된 키 길이로 고정된 크기의 블록을 반복적으로 암호화하는 구조로 설계
- 암호화 과정에서 패딩(Padding)과 초기화 벡터(IV)를 사용하여 데이터의 안전성 강화
Advanced Encryption Standard - Wikipedia
From Wikipedia, the free encyclopedia Standard for the encryption of electronic data Advanced Encryption Standard(Rijndael)Visualization of the AES round functionDesignersJoan Daemen, Vincent RijmenFirst published1998Derived fromSquareSuccessorsAnubis, Gra
en.wikipedia.org
암호화 결과값 문제 분석
- AES256 암호화 결과값에 +와 같은 특수문자가 포함되는 이유는 암호화된 데이터가 바이너리 형식
- 이 바이너리 데이터를 사람이 읽을 수 있는 문자열로 표현하기 위해 Base64 인코딩을 사용
- Base64 인코딩은 바이너리 데이터를 문자 집합으로 변환하는 방법으로, +, = 등의 문자가 포함
- AES256 암호화 결과는 바이너리 데이터이며, 이 데이터는 8비트의 Set 구성
- Base64 인코딩: 바이너리 데이터를 Base64로 인코딩
- 각 6비트 조각을 대응하는 64개의 문자(영문자 대문자, 소문자, 숫자, +(%2B))로 변환
URI 해결
- = 특수문자는 URI가 식별할 수 있는 값 (params 파싱에 활용)
- + 문자의 경우 %2B로 치환하여 브라우저에 전달해주어야 한다.
- Java의 URLEncoder.encode 함수를 활용하여 해결한다.
String key;
key = EncryptUtil.encryptAES(PRIVATE_KEY.substring(0, 16), PRIVATE_KEY.substring(0, 16).getBytes(),
String.valueOf(item.getItemNo()));
// params에 URIEncoder 추가
key = URLEncoder.encode(key, StandardCharsets.UTF_8);
mParam.put("domainURI", domain + "/controller?data=" + key);
728x90
반응형
'Develop' 카테고리의 다른 글
[Spring] IoC(Inversion of Control)와 DI(Dependency Injection) 이해하기 (0) | 2024.09.10 |
---|---|
[Spring] Spring Bean 생명주기와 @Annotation 정리 (0) | 2024.09.10 |
[Flutter] Uri를 활용한 SMS 보내기 기능 구현 (0) | 2024.08.29 |
[SMTP] 수신 메일에서의 hover, onmouse 기능 미지원 이슈 (4) | 2024.08.28 |
[CI/CD] Spring Boot .jar 서버 배포 스크립트 개선 (0) | 2024.07.25 |
[Spring Boot] IndexOutOfBoundsException 개선 작업 (1) | 2024.07.24 |
[Java] Mybatis Column '{컬럼명}' in IN/ALL/ANY subquery is ambiguous 해결 (0) | 2024.07.19 |
[Flutter] 안드로이드 스튜디오 Profiler, Devtools (0) | 2024.07.12 |