8비트의 이진 데이터를 문자코드에 영향을 받지 않는 공통 ASCII 문자 들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식
데이터를 base64로 변환하는 것을 인코딩한다, 그 반대를 디코딩 한다고 표현한다. 그리고 6bit씩 잘라서 표현한다.
데이터를 64진법으로 표현하는 방식 / 웹에서 주고받을 때 인코딩 디코딩 주로 함
인코딩 ex)
디코딩 ex)
Base64를 사용하면서, 마지막 62,63번 글자가 +,/ 인 것과 pad(=) 가 url에서 사용하는 문자라는 문제 등이 제기 되었다.
(+는 띄어쓰기 의미, /는 경로구분자, =는 name과 value사이에 쓰는 기호)
이 문자들을 전송하게 되면 정상적으로 전송되지 않는 문제가 발생한다고 한다.따라서 이 오류를 막기위해 등장한 것이 Url safe이다. (62,63 변경) Pad(=)는 그대로 가져가지만, 브라우저에서 인식하지 않게끔 한다.
임의의 문자열을 인코딩하고 디코딩 해보는 샘플코드를 작성한다.
JAVA 8부터는 표준 API로 Base64 기능을 제공한다고 한다. java.util.Base64를 사용해보도록 하자
public class Base64Test {
public static void main(String[] args) {
String sampleText = "dh in ds";
System.out.println("인코딩할 문자열 : " + sampleText);
//encoding
String encodingText = Base64.getEncoder().encodeToString(sampleText.getBytes());
System.out.println("base64로 인코딩된 문자열: " + encodingText);
// ZGggaW4gZHM=
//decoding
//String new 할때, 바이트 배열이 문자열로 변환됨
String decodingText = new String(Base64.getDecoder().decode(encodingText));
System.out.println("base64로 디코딩된 문자열: " + decodingText);
}
}
먼저 임의의 문자열을 생성했다 "dh in ds"
Base64.getEncoder().encodeToString()
이 코드는 인코딩을 하는데 문자열로 리턴을 한다는 의미이다. 필요한 매개변수는 byte[]
이다. getBytes(sampleText)
해서 넣어주자
출력해보면 인코딩된 문자열이 정상적으로 출력된다.
다음은 다시 원래대로 돌려보는 과정이다.
Base64.getDecoder().decode(encodingText)
말 그대로 디코딩을 한다. 하지만 toString이 없고 직접 넣어야한다.
방법은 쉽다. toString을 해봤는데 객체자체를 값으로 표현해서 쓰지않았고, new String을 해주면 알아서 byte 배열이 문자열로 변환된다.
public class Base64UrlSafeText {
public static void main(String[] args) {
// 아무거나 넣은 url 준비
String sampleUrl = "https://www.google.com/search?q=Base64+encode";
String encodingUrl = Base64.getUrlEncoder().encodeToString(sampleUrl.getBytes());
// aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g_cT1CYXNlNjQrZW5jb2Rl
System.out.println(encodingUrl);
String decodingUrl = new String(Base64.getUrlDecoder().decode(encodingUrl));
System.out.println(decodingUrl);
}
}
위의 과정과 동일하다.
다만 Base64가 url을 위한 메서드를 제공해준다는 것 뿐이다.
취업을 하게돼서 전에 했던 프로젝트들에 대한 정리는 추후에 하도록 해야겠다.
당장 공부할게 많아서 바쁜 날들이 될 것 같다. 화이팅!!!!