애플리케이션 개발/ios

[ios] Base64 decode

sofiaaa 2022. 12. 27. 17:15
반응형

 

 

 

var b64DecodeUnicode = function(str) {
	return decodeURIComponent(
		atob(str).replace(/(.)/g, function (m, p) {
			var code = p.charCodeAt(0).toString(16).toUpperCase();
			if (code.length < 2) {
				code = "0" + code;
			}
			return "%" + code;
			})
	    );
};
 
var base64_url_decode = function(str) {
	var output = str.replace(/-/g, "+").replace(/_/g, "/");
	switch (output.length % 4) {
	case 0:
		break;
	case 2:
		output += "==";
		break;
	case 3:
		output += "=";
		break;
	default:
		throw "Illegal base64url string!";
	}

	try {
		return b64DecodeUnicode(output);
	} catch (err) {
		return atob(output);
	}
}

 

 

그 후, base64 URL-safe encoding 된 문자열을 decode 합니다.

 

'-' 와 '_'를 왜 '+' 와 '/'로 바꾸어주는 걸까요??

base64 encoding 방법은 2진수의 데이터를 문자 코드에 영향을 받지 않게 공통 ascii 영역의 문자들로 바꾸는 인코딩 방식입니다. 64개의 ascii code를 사용하는데 a-z, A-Z, 0-9, '+', '/' 를 사용하고 있습니다.

다만, '+', '/' 특수 문자는 전송하면 정상적으로 해당 값이 전송되지 않습니다.

그래서 '+'와 '/'를 '-'와 '_'로 바꾸어 준 것이 URL-safe 입니다.

 

'==' 와 '='는 뭔데 결과에 덧붙여주는 건가요??

==와 =는 패딩입니다. 0과 같은 역할을 하고 있습니다.

 

 

https://velog.io/@1984/Flutter-jwt-token%EC%9D%84-decoding%ED%95%98%EA%B3%A0-%EC%A0%95%EB%B3%B4%EB%A5%BC-%EC%96%BB%EC%96%B4%EB%B3%B4%EC%9E%90

 

Flutter/ jwt token을 decoding하고, 정보를 얻어보자

배경 token을 사용할 때, Refresh token과 access token으로 나누어 보통 사용합니다. access token의 만료 시간이 임박했을 때만 refresh해주고 싶은 마음이 있어서, 찾아봤습니다. 같은 상황이신 분들께도 도

velog.io

 

반응형

'애플리케이션 개발 > ios' 카테고리의 다른 글

[ios] JWT  (0) 2022.12.13
[Mac] Git 설치 및 연동  (0) 2022.05.06
[Mac] M1 자바 버전 11로 변경  (0) 2022.04.29
Could not build Objective-C module 'Firebase'  (0) 2022.01.22
M1에서 터미널 사용  (0) 2022.01.22