검수요청.png검수요청.png

베이스64

해시넷
ghdrn221 (토론 | 기여)님의 2019년 8월 1일 (목) 17:34 판
이동: 둘러보기, 검색

베이스64(Base64) 은2진 데이터를 아스키 텍스트로 변환하거나 그 반대로 변환 하는 인코딩 방법 으로 컴퓨터 분야에서 쓰이는 베이스 64 란 8비트 바이너리 데이터(예를 들어 실행파일이나, ZIP파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 스트링으로 바꾸는 인코딩 방식을 가리키는 개념 이다.[1]

개요

2진 데이터를 아스키 텍스트로 변환하거나 그 반대로 변환 하는 인코딩 방법이다. MIME에 의해 사용된는 방법으로, 4개의 7비트 아스키 문자로 표현되도록 데이터를 3 바이트씩 4개의 6비트 단위로 나누어 표현되고 메일에서 텍스트, 이미지, 오디오 파일을 보낼 때 이용하거나, SLM에서 AKAAUTH를 진행 하거나, IMS통신을 하는 경우 등 매우 다양한 곳에서 활용된는 코딩 으로 모든 플랫폼에서 안보이거나 깨지는 일이 생기지 않도록 공통으로 64개의 아스키 코드를 이용하여 2진 데이터를 변환하기 위해 베이스 64를 이용 하고, 베이스 64로 인코딩하면 크기가 33% 정도 커지게 된다. [2] 원래 Base 64를 글자 그대로 번역하여 보면 64진법이란 뜻이다. 특별히 64진법이 컴퓨터에서 흥미로운 것은, 64가 2의 제곱수(64 = 26)이며, 2의 제곱수들에 기반한 진법들 중에서 화면에 표시가 되는 ASCII 문자들을 써서 표현할 수 있는 가장 큰 진법이기 때문이다. 즉 다음 제곱수인 128진법에는 128개의 기호가 필요한데 화면에 표시되는 ASCII 문자들은 128개가 되지 않는다.

특징

Base64라는 의미는 64진법이라는 의미 이다.화면에 표시되는 ASCII 문자들을 써서 표현할 수 있는 가장 큰 진법이기 때문 인데, Base64는 전자 메일을 통한 이진 데이터 전송에 많이 쓰이고 있고, 대개 처음 62두개는 A-Z, a-z, 0-9를 사용하고 있으며 마지막 두 개를 어떤 기호를 쓰느냐의 차이가 있다.[3]

Base64 Encoding 데이터를 Base64로 인코딩 하는 방법은 24비트 버퍼에 위쪽(MSB)부터 한 바이트씩 세 바이트를 집어 넣고, 남은 바이트가 3바이트 미만이라면, 버퍼의 남은 부분은 0으로 채워넣게 된다. 그리고, 버퍼의 위쪽부터 6비트씩 잘라 그 값을 읽어, 다음에 정렬된 64개 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"의 문자 중에서 읽은 값 번째 문자를 골라 출력한다. 만약 입력된 바이트가 하나라면 출력 중 두 개만이 사용되고 나머지 둘은 "="으로 패딩되며, 입력된 바이트가 둘이라면 출력 중 세 개 만이 사용되고 나머지 하나는 "="으로 패딩되게 된다. 이것은 원본으로 되돌릴 때 원본에는 없던 비트가 생기는 것을 방지하기 위해서 이고 입력 데이터가 끝날 때까지 반복하면 인코딩이 된다.[4]

  • 2진 데이터를 ASCII 형태의 텍스트로 표현 가능 하다.
  • Web 인증 중 기본인증에 사용 한다.
  • 끝 부분의 padding(==) 식별 가능 하다.
  • 64개의 문자 영문 대(26), 영문 소(26),숫자(10),+,- 를 사용 한다.

UTF-7

RFC 2152에서 정의된 UTF-7은 Modified BASE64라 불리는 시스템을 의미 하고 이 data encoding scheme는 UTF-16을 SMTP와 같이 7비트를 사용하는 ASCII문자로 변환하는데 사용된다. 이는 MIME를 사용하는 BASE64 encoding의 변화된 방식으로, Modified BASE64 알파벳은 MIME BASE64 알파벳으로 구성되어 있지만, ' = ' 패딩 기호는 사용하지 않는다. UTF-7은 메일 헤더로 구성되어 사용되며, ' = '기호는 quoted-printable encoding을 위한 이스케이프 문자로 사용된다. Modified BASE64는 간단하게 유용한 비트를 포함하고 있는 마지막 BASE64 숫자 뒤에 바로 패딩과 끝을 생략한다.

OpenPGP

RFC 4880에서 정의하고 있는 OpenPGP는 ASCII Armor로 알려진 64진수 인코딩은 64진수는 MIME에서 정의하고 있는 BASE64 encoding과 동일하며, 추가적으로 24비트 CRC 체크섬을 포함하고 있고, 체크섬은 encoding 이전의 입력 데이터로 계산한다. 체크섬은 같은 BASE64 알고리즘으로 encoding되며, 추가적으로 ' = ' 기호를 구분자로 사용하여 인코딩된 출력 데이터에 추가된다.

RFC 3548

RFC 3548(BASE16, BASE32, BASE64 Data Encodings)은 BASE64 encodings에 관한 RFC 1421과 RFC 2045의 내용을 통일시키는 정보이고, 드물게 BASE32와 BASE16에 관한 내용도 사용하고 있다., 특별히 선언되어 있지 않는 한은, RFC 3548은 인코딩 알파벳 이외의 문자를 사용한 메시지 생성을 허용하지 않고 있으며, 디코더는 인코딩 알파벳 이외의 문자가 포함되어 있는 데이터를 거부해야 한다.

응용

ABC를 bade64로 인코딩

임의로 ABC 를 정하고 맨아래의 ASCII코드표를 10진수로 변경 한다.
Q2.PNG
  1. ABC를 ASCII의 10진수로 A(65)B(66)C(67)
  2. 10진수를 2진수로 변경하면 A = 01000001, B = 01000010, C = 01000011 즉 ABC = 010000010100001001000011이 된다.
  3. 수치 6비트로 자르면 010000 010100 001001 000011 이 된다.
  4. 이수치를 다시 10진수로 치환하면 16 20 9 3 이 된다.
  5. 비트64 table 의 수치로 전환
QUJD 와 같이 변환 하고 결과 > ABC >> QUJD

Base64 색인표

정확한 규격은 RFC 1421, RFC 2045에 정의되는데, 연속된 8 비트 바이트를 인코딩하도록 정의되어 있으며, 인코딩된 결과물은 아래 표보다 4/3 정도 늘어나게 된다.

문자 문자 문자 문자
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

각주

  1. 아라비안 왕자, 〈IT용어 Base64 란?〉,《티스토리》, 2012-06-21
  2. 제이, 〈What is base64?〉,《Bareum》, 2015-02-05
  3. 민소네, 〈Base64 알고리즘〉,《깃허브》, 2014-03-20
  4. 과일가게 개발자, 〈Base64 암호화, 복호화 방법〉,《티스토리》, 2014-09-08

참고자료

같이 보기


  검수요청.png검수요청.png 이 베이스64 문서는 암호 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.