일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- factory metohd pattern
- base64
- 매크로를 바라보는 시각
- nc reverse shell
- Bandit
- 상태다이어그램
- 팬인과 팬아웃
- ssh
- 암표거래
- 소프트웨어공학 디자인패턴
- prototypepattern 예시 example
- 리버스쉘
- 생성패턴 행위패턴 구조패턴
- cron
- status diagram
- 클래스 관계
- usecase description
- 객체 상속 속성 인스턴스 메소드 오퍼레이션
- ui 디자인 기본원칙
- bandit21
- strucuture charat
- 모듈구조도
- 디자인패턴
- 구조적 설계
- UseCase
- madia designer ui design
- fan-in fan-out
- gof design pattern
- sofrware architeture
- telnet
- Today
- Total
2.log
인코딩/디코딩과 Base64 대하여 본문
인코딩?
데이터 표준화, 처리 속도 향상, 공간 절약, 보안 등의 이유로 사람이 인지할 수 있는 문자(언어)를 약속된 규칙에 따라 컴퓨터가 이해하는 언어(0 과 1)로 바꾸는 것, 크게 1) 문자 인코딩 2) 사진&오디오&비디오 인코딩으로 나뉨
문자인코딩(Character Encoding)
문자를 바이트(bytes)로 변환 (컴퓨터는 오직 binary data 만 이해하기 때문)
1. HTML Encoding
HTML 페이지를 올바르게 나타내기 위해 사용되는 인코딩 종류 (UTF-8 등)
2. URL Encoding
인터넷을 통해 전송될 수 있는 포맷으로 문자를 변환시키는 인코딩 방식으로, ASCII character-set을 사용해 인터넷으로 URL 보내는데 사용 됨 (ex. URLEncode() )
특히 한글과 같은 Non-ASCII 문자는 % + 16진수 숫자로 인코딩해서 보내주어야 하는데 이 같은 이유로 URL 인코딩을 퍼센트 인코딩이라 부르기도 하며, 인코딩 될 때 문자는 triplet(트리플렛, 세 개가 한 묶음)들로 인코딩 됨
- [예] 문자를 옥텟(octet, 8bit) 단위로 끊어 16진수로 표현하고 앞에 % 붙임
조 | ECA1B0 | %EC%A1%B0 |
- 예약문자와 비예약 문자 (by RFC3986)
이 때 예약문자는 문법적 의미를 가지므로 다른 의미로 사용하려면 반드시 인코딩 해야하며, 비예약문자들의 경우 퍼센트 인코딩 하지 않는 것을 권장함
3. UNICODE Encoding
전 세계 대부분의 언어 or writing systems 다룰 수 있고, 8/16/32 비트를 사용
- UTF-8
유니코드 인코딩의 가장 기준이 되는 것으로 기본 8bit 사용
ASCII 코드와 직접적으로 호환가능하여 legacy app 업그레이드 시 대부분 UTF-8 선택함
대개 가장 적은 메모리 사용하나, 각 글자 넓이를 보장할 수 없어 string 조작에 어려움
- UTF-32
최대메모리 사용하며 각 글자는 고정된 4바이트 넓이를 가져 string 조작이 수월함
- UTF-16
UTF-8 과 UTF-32를 반씩 섞은 인코딩
대부분의 글자를 고정 넓이 16비트 값으로 함
UTF-8의 단점인 각 글자 넓이를 항상 알 수는 없다는 한계 가짐
4. ASCII(American Standard Code for Information Interchange) Encoding
라틴문자, 숫자, 일부 특수문자를 0-127까지 숫자에 1:1 대응시킨 7비트 single byte 인코딩
현재 컴퓨터가 8비트 = 1바이트로 표준화 되어 7비트를 사용하는 아스키코드는 앞에 0을 붙여 8비트로 인코딩 진행함
5. Base64 Encoding
binary data를 ASCII 문자로 이루어진 text 로 바꾸는 것으로, 메일 시스템이나 간단한 HTTP인증에서 사용되며, tampering(부적절한 정보 수정) 방지를 위해 binary data를 쿠키나 다른 매개변수로 이동시킬 때에도 사용됨
예컨대 ASCII의 경우 7비트 인코딩이라 나머지 1비트 처리방식이 시스템별로 상이하고, 일부 제어문자(ex. 줄바꿈)역시 시스템 별로 다른 코드값을 가지므로 시스템간 데이터를 안전하게 전달하지 못함
하지만 base64는 ASCII 중 제어문자와 일부 특수문자를 제외한 64개의 안전한 출력문자(문자코드에 영향 받지 않는 공통 ASCII)를 사용해 통신과정에서 binary data(이미지, 오디오) 손실을 방지함
- 인코딩 과정
- 24비트 버퍼 생성하여 위쪽부터 1바이트(8bit)씩 3바이트를 채움
- 3바이트 미만일 경우 버퍼의 남은 부분은 0으로 채움
- 버퍼의 위쪽부터 6비트씩 잘라 값을 읽어 base64의 값으로 변경
- 버퍼의 남은 부분을 0으로 채운 값을 1바이트 당 '=' 으로 변경
이렇게 base64로 인코딩된 문자는 A-Z, a-z, 0-9, +=/ 로 구성되며 특히 '=' 기호의 경우 부족한 비트 수를 채우는 padding문자이므로 인코딩된 문자열이 '~=' 로 끝나면 base64가 적용되었다고 유추 가능함
- 리눅스 명령어
옵션 | 설명 |
-d (or --decode) | base64 decoding (옵션 없으면 인코딩) |
-i | 디코딩 시 알파벳 아닌 문자 무시 |
- 문자열 인코딩/디코딩 예시
6. Hex Encoding (base16)
각 바이트를 두자리의 base16 인코딩으로 변환 후 일반적으로 이를 다시 ASCII 인코딩함
binary data 를 plain text 로 나타낼 때 자주 사용됨
+) Base64 vs Hex
base64는 3바이트 당 4자를, hex는 1바이트 당 2자를 사용하므로 공간효율은 base64가 더 좋음
사진&오디오&비디오 인코딩
효율적이고 압축된 포맷으로 인코딩이 진행되어 저장공간을 절약해주기 때문에 공간을 효율적으로 사용하게 해주며 메일이나 다운로드 방식으로 쉽게 이동/전달 가능
디코딩?
인코딩한 데이터를 다시 원래 데이터로 되돌리는 개념 (복호화)으로, 인코딩과 디코딩은 순환 구조를 가짐
출처
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=j880825&logNo=221231640609
'HACKING > Bandit+' 카테고리의 다른 글
Hexdump 와 xxd 명령어 (1) | 2023.03.22 |
---|---|
ROT13 과 tr 명령어 (0) | 2023.03.22 |
sort와 uniq (0) | 2023.03.21 |
grep 옵션 정리 (0) | 2023.03.21 |
파일설명자와 /dev/null 로 불필요한 출력 버리기 (0) | 2023.03.21 |