inblog logo
|
sxias
    REST API

    [REST API] 9. Base64

    문정준's avatar
    문정준
    May 09, 2025
    [REST API] 9. Base64
    Contents
    1. Base642. Base64 인코딩 방법3. Base64 → ASCII (통신 방법)
     
    Base64 실습
    Base64 실습

    1. Base64

    • Base64는 사진 등의 파일을 문자로 변환하기 위해 사용하는 인코딩 기법
      • 문자로 변환 → JSON에 담아서 보낼 수 있음
      • JSON에 문자로 변환해서 담는 이유 : JSON은 바이트 자체를 담을 수 없고, 해석할 수 없음
     

    2. Base64 인코딩 방법

    • 사진을 예로 들었을 때에, 단순히 사진의 픽셀(pixel)의 좌표에 1, 0을 넣는다고 가정한다면 흑백 사진을 구현 가능
      • 색이 있는 구간을 1 (검정색), 색이 없는 구간을 0 (흰색)으로 표현
    • 100 x 100 크기의 흑백 사진을 표현하기 위해서 총 10000 바이트가 필요함 (약 10KB)
      • 색이 칠해지지 않은 픽셀을 제외할 경우 용량은 더욱 낮아질 수 있음
     
    • 컬러 사진의 경우, 색을 표현하기 위한 RGB 코드가 추가됨
      • 이때는 검정색, 흰색도 전부 표기해야 하므로 픽셀의 제외가 불가능함
    • 한 픽셀의 x, y, R, G, B의 값을 전부 표현하기 위해 5 바이트가 필요
      • 100 x 100 크기의 사진을 전부 표현하기 위해선 50000 바이트가 필요 (약 50KB)
    notion image
    notion image

    3. Base64 → ASCII (통신 방법)

    • 컬러 사진을 JSON에 담아서 보내야 할 때의 문제가 발생
      • ASCII는 7비트로 글자를 표현하고, 마지막 1비트는 오류 검출용 패리티 비트
      • 8비트이더라도 0 ~ 127까지의 수밖에 표현할 수 없음
    • RGB 값은 하나 당 0 ~ 255 까지 표현 가능하므로, ASCII 코드로 전부 전환할 수 없음
      • 이때, Base64를 활용하여 통신을 진행
    notion image
    • 위 그림처럼,
    01101110 10001000 11011000 11110000 10010000
    의 5비트 데이터가 들어왔을 때에 Base64를 활용하여 글자로 변환해야 함
     

    1. Base64 Encoding

    • 우선, 5비트 데이터를 전부 일렬로 나열시킨 후, 6글자(6비트)씩 끊어 인코딩을 준비
      • 마지막의 ‘=’ 기호는 데이터를 채우기 위한 padding
    011011/101000/100011/011000/111100/001001/0000==
     
    • 6자씩 끊은 2진수를 10진수로 변환하여, 해당하는 문자로 치환
    값
    문자
    값
    문자
    값
    문자
    값
    문자
    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
    /
    27 40 35 24 60 9 0 b o j Y 8 J A
     

    2. 해당하는 문자열을 ASCII 문자에서 찾아 치환

    • ‘bojY8JA’ 라는 문자열이 Base64를 통해 생성되었으니, 이를 전송하기 위해 ASCII 코드로 치환해야 함
    notion image
    98 111 106 89 56 74 65
    • 변환한 ASCII 코드를 2진수로 다시 치환 후 전송
    01100010 01101111 01101010 01011001 00111000 01001010 01000001
     

    3. Base64 Decoding

    • 전송 받은 숫자를 ASCII 코드에서 찾아 문자열을 찾은 후, 동일한 문자열을 Base64에서 찾음
    • 찾은 문자열의 코드를 디코딩하여 일렬로 이어붙임
    • 붙인 문자열을 다시 8자씩 끊어서 파싱 후 해석
     
    Share article
    Contents
    1. Base642. Base64 인코딩 방법3. Base64 → ASCII (통신 방법)

    Sxias ㆍ a32176740@gmail.com

    RSS·Powered by Inblog