Study Record

[암호] 인코딩과 디코딩 (hURL CMD) 본문

암호

[암호] 인코딩과 디코딩 (hURL CMD)

초코초코초코 2021. 12. 7. 10:42
728x90

1. 인코딩과 디코딩이란? 

  • 정보의 형태나 형식을 변환하는 처리에 대해 표준화하고 보안, 처리 속도 향상, 저장 공간 절약 등의 목적으로 사용한다. 
  • 내용에는 변화가 없다.
  • 암호화와는 다른 개념이다.

 

2. 인코딩과 디코딩의 종류

※ UNICODE

전 세계의 모든 문자를 컴퓨터에서 일관되게 표현할 수 있도록 고안된 코드 조합으로 인코딩 방식이 아니라 문자를 숫자로 매핑하는 방식을 말한다. UNICODE 를 표현하는 여러 가지 인코딩 방식(UTF-8, UTF-16 등)이 존재한다.

 

ASCII Encoding

아스키는 7비트 인코딩으로, 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 총128개로 이루어진다. 영어를 위한 문자로 만들어졌기 때문에 일본어, 중국어 등 다른 언어를 표현하지 못한다. 제어 문자들은 역사적인 이유로 남아 있으며 대부분은 더 이상 사용되지 않는다.

( 출력 가능한 문자 = 52개의 영문 알파벳 대소문자 + 10개의 숫자 + 32개의 특수 문자 + 1개의 공백문자 )

(Linux) # man ascii

 

ISO 8859-1 ( == 'ISO Latin 1' )

국제표준화기구에서 정의한 확장 ASCII 이며 서유럽에서 일반적으로 사용하는 문자들을 포함한다.

 

CP949 ( == MS949 )

마이크로소프트에서 정의한 한글 문자 집합. EUC-KR에서 지원되는 한글 2350자 외에 나머지 8822자가 추가되었으며 Win95 한글판에 탑재되어 배포되었다. 949는 한국어라는 의미이다.

(window) C:> chcp 

 

ANSI Encoding

ASCII 의 확장판으로 8bit로 구성되어 있으며 256개의 문자를 표현할 수 있다.

ANSI의 앞 7bit는 ASCII와 동일하고, 뒤에 1bit를 이용하여 codePage 값 즉, 나라별 언어를 나타내는 값을 나타낸다. 

ANSI(8it) = ASCII(7bit) + codePage(1bit)

이런식으로 다양한 언어를 나타낼 수 있다.

 

☞ UTF-8 (Universal Coded Character Set + Transformation Format – 8-bit)

하나의 문자를 1~4바이트의 가변길이로 표현한다. 1바이트 영역은 ASCII코드와 하위 호환되며 ASCII코드의 128개 문자 집합은 UTF-8과 동일하게 호환된다. 한글은 3byte 이상을 사용한다.

 

UTF-16 (Universal Coded Character Set + Transformation Format – 16-bit)

16bit 기반으로 저장하는 UTF-8의 변형으로 한글의 경우 UTF-8로 저장할 경우 3bytes가 필요한데, UTF-16으로 저장하면 2bytes 혹은 그 이상을 사용한다. 엔디안 처리를 고려함에 따른 복잡성 증대나 ANSI와 호환이 안되는 단점이 있다.

 

 UTF-32 (Universal Coded Character Set + Transformation Format – 32-bit)

모든 문자를 4bytes로 인코딩한다. 따라서 비효율적으로 메모리를 사용하게 되어 잘 사용되지는 않는다.

 

URL Encoding

https://hwp.polarisoffice.com/?utm_source=pohomepage&utm_medium=floatingmenu

위와 같이 인터넷에서 사용하는 URL은 URL 스펙인 RFC 1738에 따르면, URL에 사용할 수 있는 문자는 알파벳, 숫자와 몇가지 특수문자로 제한되어있어 한글을 사용하거나 다른 특수문자를 사용하려면 URL에 허용하는 문자로 변환해줘야 한다. 기존 문자열의 Hex앞에 %를 사용한다. 한글의 경우 UTF-8을 사용한다.

문자 Windows-1252 UTF-8
space %20 %20
! %21 %21
" %22 %22
# %23 %23
$ %24 %24
% %25 %25
& %26 %26
' %27 %27
( %28 %28
) %29 %29
* %2A %2A
+ %2B %2B
, %2C %2C
- %2D %2D
. %2E %2E
/ %2F %2F

인코딩이 사용된 예는 다음과 같다.

https://itstory.tk/entry/%EC%9D%B8%EC%BD%94%EB%94%A9%EC%9D%B4%EB%9E%80-ASCII-URL-HTML-Base64-MS-Script-%EC%9D%B8%EC%BD%94%EB%94%A9

 

☞ Base64 Encoding

8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식이다. Base64에서 알수 있듯이 64진법을 따르는데 64진법의 다음 제곱수인 128진법에는 128개의 기호가 필요한데 화면에 표시되는 ASCII 문자들은 128개가 되지 않는다. 따라서, 보통 62개는 알파벳 A-Z, a-z와 0-9를 사용하고 있으며 마지막 두 개를 어떤 기호를 쓰느냐의 차이만 있다.

 

→ BASE64 인코딩 순서

() 아스키 테이블 맵핑

() 2진수 변환

() 6bit 단위로 분할

() 10진수 변환

() BASE64 테이블 맵핑

() 패딩연산( 총 비트수 % 3 => 0 : 없음 / 1 : = / 2 : == )

 

→ 출처 : https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464

 

HTML Encoding

html에서 문제가 있을만한 문자들을 인코딩하여 안전하게 HTML 문서와 함께 사용하기 위해 사용한다.

악의적인 스크립트 삽입 공격(XSS(Cross Site Scripting))의 대응방안으로 사용된다.

 

☞ MS Encoding

 Microsoft 에서 제공하는 인코딩 기법으로 MS Script Decoder를 가지고 있는 IE에서만 사용 가능하다.

<script language="Jscript.Encode"> 를 명시하여 IE에게 알려주어야 한다. 범용성이 뛰어나지 않아 거의 사용하지 않는다.

 

※ URL을 메모장에 복사할 때 깨지는 이유

URL의 문자열 인코딩은 Percent Encoding 인데 반해, 메모장의 문자열 인코딩은 ANSI Encoding(윈도우 처음 설치 시 언어를 한글로 선택하면 기본 인코딩 방식이 CP949로 설정된다.)으로, 문자열 인코딩이 다르기 때문이다.

 

3. 인코딩 디코딩 실습 - Linux

 

☞ hURL CMD

→ 설치 :  apt-get install hurl -y→ 형식 :  /usr/bin/hURL [ -flag|--flag ] [ -f <file1>,<file2> ] [ string ]→ 도움말 : hURL --help

 

인코딩 실습

/usr/bin/hURL -U "hello world"

/usr/bin/hURL -B "hello world"

/usr/bin/hURL -H "<hello world>"

 

→ 디코딩 실습

/usr/bin/hURL -u "hello%20world"

/usr/bin/hURL -b "aGVsbG8gd29ybGQ="

/usr/bin/hURL -h "&lt;hello world&gt;"

728x90