인코딩, 해싱, 암호화의 비교

2025년 8월 22일 금요일

인코딩, 해싱, 암호화를 비교합니다.

하기 영상을 참고하였습니다.

인코딩해싱암호화
Is reversible?
Is secure?

인코딩

인간은 컴퓨터의 언어를 이해할 수 없습니다. 컴퓨터는 인간의 언어를 이해할 수 없습니다. 이러한 문제를 해결하기 위해 인코딩이 필요합니다. 인간의 언어를 컴퓨터의 언어로 변환하는 것이 인코딩입니다. 컴퓨터의 언어를 인간의 언어로 변화하는 것이 디코딩입니다.

인코딩은 가역적이며, 데이터의 보존과 일치성에 목적을 두고 있습니다.

브라우저의 URL, 동영상, 문서저장에 인코딩이 사용됩니다. 가장 흔한 인코딩 중 하나인 URL 인코딩은 Percent-인코딩으로도 불립니다.

참고 : Percent-인코딩 from MDN

해싱

우리가 웹페이지의 가입할 때, 모든 비밀번호는 해시화 되어 데이터베이스에 저장됩니다. 이처럼 해싱은 보안성을 위해 사용됩니다. 뿐만아니라 데이터의 일치성(변조감지), 해쉬테이블을 통한 빠른 데이터 찾기, 데이터의 유일성 확보, 데이터다운로드 등에 사용되기도 합니다.

해싱은 가역적이지 않습니다. 어떤 길이의 문자열을 입력하든, 정해진 길이의 문자열을 출력합니다. 같은 값을 넣었을 때, 출력되는 값이 항상 같습니다.

같은 값을 넣었을 때, 출력되는 값이 같으므로 보안에 취약한 점이 있습니다. 입력값과 출력값을 정리한 표를 Rainbow-table이라고 부릅니다. 이를 보완하기 위해 해쉬값에 salt를 추가하여 Rainbow-table을 무력화 하기도 합니다.

웹페이지에서 많이 사용되는 JSON Web Tokens(JWT)가 해싱을 사용한 대표적인 예 입니다.

참고 : JSON Web Tokens - jwt.io

암호화

가역적인 보안성이 필요한 경우는 암호화를 사용합니다. 암호화의 목적은 기밀성, 보안, 인증에 있습니다.

데이터는 보낼때부터 암호화 되며, 올바른 암호키가 없으면 해독할 수 없습니다. 때문에 중간에 데이터가 탈취되더라도 보안성을 유지할 수 있습니다.

가장 유명한 암호문 중 하나는, CAESAR’s cipher이며 암호화 하고자 하는 내용을 알파벳별로 일정한 거리만큼 밀어서 다른 알파벳으로 치환하는 방식을 사용하였습니다.
hello(알파벳을 3칸 씩 밀면) -> khoor

참고 : 암호문 from MDN