Base64 is a group of similar binary-to-text encoding.

 

The Base64 index table:

Value Char   Value Char   Value Char   Value Char
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 /

 

 

Encoding example. 3 char( Byte ) 씩 끊어서 읽고 4 char로 encoding(3Byte -> 4Byte)한다.

 

Text content M a n
ASCII 77 (0x4d) 97 (0x61) 110 (0x6e)
Bit pattern 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
Index 19 22 5 46
Base64-encoded T W F u

 

 

만약 3 Byte 중 1 byte가 없을 경우,

 

Text content M a  
ASCII 77 (0x4d) 97 (0x61) 0 (0x00)
Bit pattern 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0
Index 19 22 4 0
Base64-encoded T W E =

 

만약 3 Byte 중 2 byte가 없을 경우,

 

Text content M    
ASCII 77 (0x4d) 0 (0x00) 0 (0x00)
Bit pattern 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Index 19 16 0 0
Base64-encoded T Q = =

 

 

1. 맨 끝에 '='나 '=='가 들어가는 것 이외에도, 그 앞의 char가 바뀐다.

2. 앞에서부터 3Byte 씩 encoding 하기 때문에, 문자열의 위치에 따라 output이 변경될 수 있다.

 

Base64 Url Safe

Base64Utils.encodeToString(it)
Base64Utils.encodeToUrlSafeString(it)

두 개 스펙이 다른데, 기본 Base64는 변환 결과에 + /가 포함 될 수 있다.

url에 넘길 때는 이 문자들이 포함되면 문제가 발생 할 수 있기 때문에, +를 -로 /를 _로 변경한 포맷이 Base64 Url Safe이다.

 

결과 문자열에 +/가 포함되어 있으면 그냥 Base64라고 보면 되고

-_가 포함되어 있으면 Base64 Url Safe라고 보면 된다.

 

Radix-64

Radix-64 encoding, also known as "ASCII Armor". Radix-64 is identical to the "Base64" encoding described from MIME, with the addition of an optional 24-bit CRC. The checksum is calculated on the input data before encoding; the checksum is then encoded with the same Base64 algorithm and, using an additional "=" symbol as separator, appended to the encoded output data.

 

즉 Base64 포맷에 맨 끝쪽에 = 이후 24-bit CRC 있으면. Radix-64

 

'Security > Crypto-PKCS' 카테고리의 다른 글

John the ripper  (0) 2016.12.25
Block cipher mode of operation  (0) 2016.11.25
동기식, 비동기식 stream cipher  (1) 2016.11.18
PKCS ( Public Key Cryptography Standards )  (0) 2016.09.14
Birthday Problem & Attack  (0) 2016.09.10