본문 바로가기

base64 본문

개념 정리

base64

Seongjun_You 2022. 2. 13. 17:07

Base64는 그대로 표현하면 64진법이다.

바이너리 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 문자로 표현하기 위해 만들어진 인코딩이다.

 

8비트짜리 바이트 3개를 6비트씩 4개로 쪼개어 Base64 코드 4개로 바꾸어 표현한다.

 

 

example

원문
E
1
L
바이트 값
0x45
0x31
0x4C
2진수
0
1
0
0
0
1
0
1
0
0
1
1
0
0
0
1
0
1
0
0
1
1
0
0
변환 값
17
19
5
12
결과
R
T
F
M

원문 'E1L' 을 인코딩하는 과정이다.

결과로 'RTFM' 이 나온다.

 

$ echo -n E1L | base64
RTFM
$ echo RTFM | base64 --decode
E1L

리눅스에서의 인코딩 디코딩 과정이다.

 

Base64 변환표

문자
 
문자
 
문자
 
문자
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
+[2]
15
P
31
f
47
v
63
/

 

워게임에서는 base64 custom table로 문제가 나오기도 한다.

table을 사용자가 직접 바꾸어 인코딩 디코딩이 가능하다는 것이다.

https://dreamhack.io/wargame/challenges/105/

 

baseball

Description 바이너리를 분석하여 플래그를 얻어주세요. 얻은 플래그는 DH{<flag>} 형식으로 인증해주세요.

dreamhack.io

관련 워게임 문제이다.

 

 

python을 통한 간단한 base64 동작이다.

import base64
mytext = "This is my secret text"
encoded=(base64.b64encode(mytext.encode('ascii')))
encoded_ascii=encoded.decode('ascii')
print(encoded_ascii)

텍스트를 인코딩하는 과정이다.

ascii형태로 encode를 진행한다.

 

import base64
base64_text = "VGhpcyBpcyBteSBzZWNyZXQgdGV4dA=="
decoded = base64.b64decode(base64_text.encode('ascii'))
decoded_ascii=decoded.decode('ascii')
print(decoded_ascii)

텍스트를 디코딩하는 과정이다.

 

import base64
file = "https://d1ny9casiyy5u5.cloudfront.net/tmp/myimage.png"

with open(file, 'rb') as file_binary:
    data = file_binary.read()
    encoded = base64.b64encode(data)
    encoded_utf8 = encoded.decode('utf-8')
    print(encoded_utf8)

바이너리를 인코딩하는 과정이다.

 

 

import base64
file = "https://d1ny9casiyy5u5.cloudfront.net/tmp/myimage.png"
file_base64 = "iVBORw0KGgoAAAANSUhEUgAAAI4AAAAlCAMAAACj+CEXAAAAe1BMVEUBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEEBARBQUFEREQ5OTkyMjIwMDBERERFRUUzMzNTU1M5OTk7Ozs8PDxJSUlTU1Nubm5+fn6CgoKqqqqlpaVqampXV1cAAAARERGBiHwBAAAAJXRSTlP61+/GtKCOdlBjQzEkFxIFDwYBAAEDBg0NQVJqjMz07ODco8hubKn0rgAAA5JJREFUWMPFmN1y2zgMRkMC4D8JTj5pp8k2yTRNg7z/E+6FbG+aujOunV2fO0oU5ggERVI3+BSWdV0+I84N/vpyKqse+BimhFB2Yr/tc5LO7fPriTzdJwkb8WOYRLa71uPv+hxFx0/aN8vXx28n8fRwJ57Fe2bvfgnb/9Xxnvlon2M0lz7oPJ2Wx/unuxABIkVkYPa5e72uAJpl9LECANMEEAmz97HM3qeOruvY5UH7WIDZO2ZfZ7H4flj/QOfxDgoQDaguJUgoCrQoEquiWcwiSQEwdQC9Lok5rok5l8A5B8kTWFqUkCZS4BJFExvFfq4ONh2geArkCjo7Cc43NCMO5DMApjbnBNbKJshGqQVzFNgi0MgF9hk1GElAEaM8LtVRR8AgQfQJKL6imQDNCQD2IiINwGQq4ioARxNg3zX4Bgg1lK3YmuUza+edTjOKMTjqQg3Q3LewnVnf66CRdwmAOlGgWOrkYozkK5KVBUD9DJ1ixMwcG/Nu4JvFgw7N/TNrNJ4HnWaxO8/MHNqn6jSLOsZUFWrAUvvPOh3AaAAqOZcPOtXycKRjzKmfp6OAOlJg9K12kqvoloHBfJjomYDBVIMr+/5iTYOvQO9AsXLI6nKuzsjeBwWSp8CU0dmJeB5VjJNG73PL3ksIwRkKW0Ayl1WdI2ELQCUv4qIWNi4Amvf75eUMnR5FRAGtQULuQM8iuaOISJ5BJNYoO5BEIopwHOo4B8kDWFsUyQ1JRBIALRLq2To6xugLAMwxdfsqDwW0jzHXMcbQsQezjwntY2Jxooev8hgKzDHGBIB1F+fM2jmHtXpup63of6ITzG9QNu+lbk2uADQ676Qef7Q4M6+friOUinOpsBvRpC3Jc0mZfIWSjymzz8ezc/L25490clYQDaSwTdDqAoDuRZMlAI0CLuPMJfS9Dog0WwUwcrq+jjrR7l2Zevl2+UId6b2KLysqmQtFr6tD5r13eQGAEpyXeeXstNYAoDcAiD5eV2c/kyIB++3XNXTqBx0rffR8eXbWr4/3f5/Cw8Md0KN5UaCwUepiLm/V0sSxsJN+qc7t8+uP03i63w51okAJIeQWQtjvuzXFENLAcqnOy0e+b4fOb7/c+IL/nJtfL728vb29vb09vOD/56iOmZldWef2Z52ba2fn5fvGtxszM3vcNb/fXkfn+XErmm2s7GbXev1yJZ3Xx2P8uJLO7356XXlmXZN/AFQ7epD6bAWAAAAAAElFTkSuQmCC"

encoded = file_base64.encode('utf-8')
with open(file, 'wb') as file:
    decoded_data = base64.decodebytes(encoded)
    file.write(decoded_data)

바이너리를 디코딩하는 과정이다.

'개념 정리' 카테고리의 다른 글

WEB  (0) 2022.05.27
HTTP/HTTPS  (0) 2022.05.27
_IO_FILE Arbitrary Address Write  (0) 2022.02.10
_IO_FILE Arbitrary Address Read  (0) 2022.02.10
__environ  (0) 2022.02.09
Comments