[SpringBoot] java.lang.IllegalArgumentException: Illegal base64 character 20

문제

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;

 

 

AES-256 java util 사용 예제