[Java/자바] Base64.Encoder.withoutpadding 적용하기 (안드로이드 NO_PADDING 참고)

 

안드로이드 기준으로 작성된 Base64 인코딩을 자바로 바꿔야 해서 찾아보다,

Base64.NO_PADDING -> withoutPadding으로 대체가 가능하다는 점을 발견하고

자바에서 Base64 인코딩 시 withoutPadding 적용 후 차이점도 정리해 보았다

 

안드로이드 NO_PADDING
import android.util.Base64;

public static String base64UrlEncodeStr(byte[] bytes) {
    return Base64.encodeToString(bytes, Base64.URL_SAFE | Base64.NO_WRAP |  Base64.NO_PADDING);
}

 

자바 withoutpadding
import java.util.Base64;

public class Base64Test {

    public static void main(String[] args) {
        String str = "Base64Test";
        String encodedStr = Base64.getEncoder().encodeToString(str.getBytes());
        String withoutPadding = Base64.getEncoder().withoutPadding().encodeToString(str.getBytes());

        System.out.println("encodedStr : " + encodedStr);
        System.out.println("withoutPadding : " + withoutPadding);
    }
}

 

결과
encodedStr : QmFzZTY0VGVzdA==

Base64 인코딩은 인코딩된 문자열의 길이가 3의 배수가 아닌 경우 기본적으로 인코딩 된 바이트 데이터 끝에

패딩문자(=)를 추가합니다. 디코딩 시에는 패딩 문자 삭제함

 

withoutPadding : QmFzZTY0VGVzdA

패딩 문자를 빼고 인코딩된 출력값을 얻을 수 있고, 이 출력 결과는 다시 디코딩할 수 없습니다.

 

참고

https://recordsoflife.tistory.com/331

https://www.baeldung.com/java-base64-encode-and-decode