hello world
illegal base64 character 20 오류 본문
728x90
전에 개발했던부분에서 오류발견.. 토큰값을 암복호화하는데 자꾸 오류가 난다., 찾아보니
https://www.freeism.co.kr/wp/archives/1022
기존의 base64 mapping table을 보면, ‘+’와 ‘/’ 문자가 존재한다.
이런 문자들은 http 통신을 할 때에 각각 공백과 path로 오해할 수 있는 부분이라서 문제가 발생한다. 그래서 urlsafe방식이 나오게 되었는데, ‘+’문자와 ‘/’문자를 각각 ‘-‘문자와 ‘_’문자로 치환하여 사용한다.
로그를 더 찾아보니 '+' 문자를 공백으로 인식하고 복호화를 진행해서 생기는 오류였다.
서버쪽에서 아래와 같이 Base64Utils.encodeToUrlSafeString 으로 바꿔주면
+- 가 포함된 문자를 ‘-‘문자와 ‘_’문자로 치환하여 암복호화를실행한다.
Base64.getEncoder().encodeToString(str.getBytes()); ->Base64Utils.encodeToUrlSafeString(sample.getBytes());
Base64.getDecoder().decode(str.getBytes()); -> Base64Utils.decodeFromUrlSafeString(encoded2)
근데 나는 클라이언트 부분에서 이미 encodeURI(token); 을 사용한게 문제였다. ...
encodeURL 함수는 ; / ? : @ & = + $ , - _ . ! ~ * ' ( ) # & 문자를 인코딩 하지 않는다고 한다.
그래서 encodeURIComponent 을 사용해줘야 위와 같은 오류를 방지할 수 있다.
encodeURIComponent 를 사용할경우 ; / ? : @ & = + $ , - _ . ! ~ * ' ( ) # & 를 %로 치환한다.
encodeURI(token) -> encodeURIComponent(token)
;;삽질 끝
'WEB > error_log' 카테고리의 다른 글
젠킨스 permission denined 오류 (0) | 2021.12.14 |
---|---|
자바 Unrecognized field.. not marked as ignorable (1) | 2021.08.31 |
이클립스 TLS10 is not accepted by client preferences [TLS12] 오류 (1) | 2021.07.01 |
자바 파일 업로드 익스플로러 에러 .json을 열거나 저장하시겠습니까 (0) | 2020.03.06 |
No mapping found for HTTP request with URI ... (0) | 2020.01.07 |
Comments