
안녕하십니까 코딩 파인애플입니다
이번 시간에는 암호학에 관해 알아보겠습니다.
암호학(Cryptography)은 정보를 안전하게 보호하기 위해 수학과 컴퓨터 과학을 바탕으로 메시지를 변환하는 방법과 이를 해독하는 원리를 연구하는 학문을 의미합니다
예를 들어 저, 코딩 파인애플하고 저번 RGB에 나온 제 친구, 더미가 서로 게임에 관한 정보를 주고받는다고 가정해봅시다

원래라면 이 메시지가 그대로 더미에게 전달되야 하지만 제 3자인 케인👺👺👺이라는 사람이 중간에 개입하여 내용을 가로챕니다

케인이 메시지를 변조하여 "은평구의 언덕 4시쯤 코괴물이 있다"
라는 잘못된 정보로 바꾼다면, 더미는 코딩 파인애플이 보낸 정보라고 믿고 잘못된 내용을 전달받을 수 있습니다

이런 문제를 해결하기 위해 등장한 것이 암호학(Cryptography) 입니다
암호학도 대표적인 4가지 목표가 존재합니다
김일성 누가 봐도 내용을 알 수 없게 합니다
예를 들어 원본이 password=1234 이라면 암호화는 8fA92kLm
즉, 키가 없으면 복호화 불가능합니다 🔑🔑🔑
대표적으로 AES, RSA, ChaCha20 등이 있습니다.
데이터가 중간에 변조되지 않았음을 보장합니다
예를 들어 원본이 hello.exe이고 해시는 a94a8fe5ccb19... 인데
누군가 파일을 수정하면 b72d91ab8c21... 해시가 달라집니다
대표적으로 SHA-256,HMAC 등이 있습니다
상대방이 진짜인지 확인합니다
예를 들어 접속한 사이트 https://google.com 정말 구글인지 어떻게 알까요
이를 위해 인증서와 전자서명을 이용합니다
나중에 발뺌하지 못하게 합니다
예를 들어 코딩 파인애플과 더미가 계약을 한다면
구두 계약일 경우 나중에 더미가 '안했다'라고 발뻄을 할 수 있지만
서면 계약일 경우 서면이 있어 더미가 '안했다'라고 발뻄하기 어렵습니다
ASCII(American Standard Code for Information Interchange)는 0부터 127까지의 정수를 사용하여 텍스트를 표현할 수 있는 7비트 인코딩 표준입니다
왜 128개만 사용하는가?
아스키코드는 1바이트를 사용합니다
그렇기 때문에 2^8=256개를 사용할 수 있지만 2^7=128 까지만 사용합니다 그 까닭은 나머지 1bit는 Parity Bit 즉, 통신 에러 검출을 위해 사용하기 위해 남겨둡니다
대응표는 다음과 같습니다
ascii_codes = []
res = ""
for i in ascii_codes:
char = chr(i) # chr : 아스키코드 또는 유니코드 값을 입력받아 그에 해당하는 문자로 변환해 주는 함수
res += char # 결과 문자열에 추가
print(res)
HEX(hexadecimal)는...그냥 쉽게 말해 16진수라 보시면 됩니다
파이썬 디코딩 코드로 나타내면 다음과 같습니다
hex_data = ""
result = ""
for value in hex_data.split():
number = int(value, 16)
character = chr(number)
result += character
print(result)
Base64는 바이너리(Binary) 데이터를 ASCII 문자로 변환하는 인코딩 방식입니다
즉,
원본 데이터 -> Base64 Encoding -> ASCII 문자열
구조입니다
대표적인 사이트는 https://www.base64decode.org/ko/ 이 있겠습니다... 신세를 참 많이 지죠
파이썬 디코딩 코드로 나타내면 다음과 같습니다
import base64
encoded = ""
decoded = base64.b64decode(encoded)
#Base64로 인코딩 된 문자열을 원래의 데이터로 디코딩하는 함수
print(decoded)
이상으로 글을 마치겠습니다 감사합니다.

ADRIAN 🗣️🗣️🗣️🔥🔥🔥🔥