메뉴 건너뛰기

infra

encoding과 decoding

박영식2008.05.16 17:34조회 수 2725댓글 0

    • 글자 크기
최근에 제 주위에서 encoding 이라는 용어가 많이 나오네요.  동영상을 encoding 하는 경우가 있네요.


위와 같은 경우 encoding 이라는 용어는 내용은 유지하면서 그 포맷을 변경하는 것을 말합니다. Decoding 이라는 말은 그 역을 말하겠죠. 여기서 중요한 것은 encoding이라는 것은 원래 내용의 변화를 가져 오지 않고 그 형식만을 변화 한다는 겁니다. 또한 이는 암호화 와는 달리 키가 없어도 다시 원래의 데이터로 변경이 가능합니다.


암호쪽에서는 좀더 제한적인 의미로 많이 사용하는데 encoding기법은 한마디로 말해서 binary 데이터를 ascii형태의 문자로 표현하는 과정을 말합니다. 또한 decoding은 역으로 ascii형태의 데이터에서 binary 데이터를 얻어오는 과정을 말합니다.


먼저 그러면 어떠할 때 encoding이 필요한지부터 보죠..


여러가지 암호기법을 통해 원문(plain text)를 암호화 하면 암호문(cipher text)가 생성되는 것을 알았습니다. 여기서 원문은 사람이 알아볼수 있는 character set으로 구성되어 있습니다. 문제는 원문을 암호화 하는 과정에서 발생합니다. 컴퓨터에서 사용하는 이진데이타(binary data)중 character set 부분은 지극히 일부분이며 그외의 데이터들도 존재합니다. 그런데 데이터를 암호화 하다보면 그 결과가 반드시 character set으로 나오라는 보장이 없습니다. 암호문은 대개의 경우 binary data 의 형태로 존재하게 됩니다. 그중에는 NULL 값도 포함되지요. 암호문에 NULL데이터를 포함하고 있으면 우리는 여러가지 string 처리를 할수 없게 됩니다. 그러한 string 관련 명령들이 문장의 끝을 구분하는 기준으로 NULL을 사용하기 때문입니다. 또한 어떠한 데이터는 값이 아닌 컴퓨터의 제어코드인 경우도 있습니다. 이러한 binary data는 송신자와 수신자간의 데이터 전송간의 문제를 발생시킬 여지가 많습니다. 또한 네트워크 통신등을 할 때 잘못된 해석을 초래할수도 있고요


이러한 경우에 우리는 암호문을 다시 변환하는 과정을 갖습니다. 이게 encoding 입니다. 이는 앞에서 언급한대로 그 형식을 변경한것이지 암호화 하고는 다릅니다.


우리가 사용하는 encoding 방식중에는 대표적인 것이 base64 encoding 과 hexa encoding 이 있습니다.
Hexa encode는 1byte의 binary 데이터를 2개의 16진수 값으로 표현하는 것을 말합니다.
예를 들어 0x0a01 이라는 binary 데이터가 있다면 이를 ‘a’ ‘1’ 이라는 두개의 문자로 구분하는 것입니다.
이와는 달리 base64encode는 3개의 binary 데이터를 4개의 ascii 문자로 바꾸는 것을 말합니다.
사용적인 측면에서는 hexa encoding이 쉽지만 이는 결과물이 원본에 두배의 용량이 됩니다. Base64encode는 그보다는 경제적으로 4/3의 크기로 변경됩니다. 그래서 실제로는 base64encode가 더 선호됩니다.

위 의 샘플 프로그램을 보시면 평문을 암호화 한 결과는 알아볼수 없는 데이터형태로 생성됩니다. 이러한 데이터를 그대로 string 처리하여 복호화 하면 종종 원본 데이터를 잃어버리게 되죠. 중간에 NULL 데이터가 포함된 경우입니다. 이를 base64로 encoding 해보겠습니다.

위의 경우 원문(text base)암호문(binary data)encoding data(text base) 형태로 암호문이 생성된것이며 복호시에는 decoding 부터 시작하게 됩니다.
Base64 encoding  방식은 RFC3548를 바탕으로 64개의 alphabet 을 기본으로 구성됩니다.
그리고 24bit (3byte)를 받아서 Base64 글자 4개 (4byte)를 만들어 내는데, 6bit씩 binary 로 풀이하여 대응하는 글자를 적어 나갑니다. 보다 자세한 사항은 관련 문서를 참고하세요
또 한 base64encoding은 메일시스템에서도 유용하게 사용됩니다. 우리나라처럼 알파벳이 아닌 유니코드 체계를 사용하는 메일시스템에서 다른 메일서버등을 경유하여 메일을 보낼 때 그 내용의 손실이 없게 하기 위하여 base64encoding을 사용합니다.
박영식 (비회원)
    • 글자 크기

댓글 달기

박영식
2009.08.01 조회 5409
박영식
2009.04.09 조회 3017
박영식
2009.03.04 조회 2454
박영식
2009.03.04 조회 2536
이전 1 ... 2 3 4 5 6 7 8 9 10 11다음
첨부 (0)
위로