문제
https://yourdomain.com/api?ciphertext=3+2BL9mHNCNRUdUM6wdBoSFQ==
AES 암호화 값에 +, / 등 특수문자가 포함된 base64 문자열을 전달 시 서버에서 복호화할 때 아래와 같이 에러가 발생됨
Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character 20
at java.base/java.util.Base64$Decoder.decode0(Base64.java:746)
at java.base/java.util.Base64$Decoder.decode(Base64.java:538)
원인
특수 문자가(+ , /) 포함된 Base64 문자열이 변환되어 분리되므로 + → %2B, / → %2F 등으로 URL 인코딩 적용해야 함.
enc text: 3+L9mHNCNRUdUM6wdBoSFQ==
enc text: 3 L9mHNCNRUdUM6wdBoSFQ==
해결
- 서버에서 URL 인코딩 적용
String base64 = "3+L9mHNCNRUdUM6wdBoSFQ==;
String encoded = URLEncoder.encode(base64, "UTF-8");
// encoded 결과: 3%2BL9mHNCNRUdUM6wdBoSFQ%3D%3D
https://yourdomain.com/api?ciphertext=3%2BL9mHNCNRUdUM6wdBoSFQ%3D%3D
- 클라이언트에서 암호문 URL 인코딩 적용 후 전송
const base64 = "cqn8DHlClPtCJ3+AhtmNOA";
const encoded = encodeURIComponent(base64);
location.href = "https://yourdomain.com/api?ciphertext="+encoded;