Hashing
Hashing이란 임의 길이의 데이터를 고정된 길이의 데이터로 변화시켜 저장하는 것을 말한다.
해싱을 수행하는 함수나 알고리즘을 해시 함수, 해시 알고리즘이라 하고, 해시 함수의 결과를 해시 값, 해시 코드, 해시 체크섬 또는 해시라고 일컫는다.
해시는 빠른 데이터 검색을 위한 해시 테이블이라는 자료 구조에 사용하거나, 해시 값으로는 원문을 알아내기 힘들다는 점을 이용해 값을 암호화하는 데 사용할 수도 있다. 또는 전송된 데이터의 무결성을 확인하는 데 사용하기도 한다.
hashlib
Python에서 해시 함수를 사용할 때는 hashlib라는 모듈을 사용한다. hashlib에는 암호화 알고리즘인 SHA1, SHA224, SHA256, MD5 등등의 여러 알고리즘을 포함하고 있다.
별도 설치 없이 바로 import하여 사용할 수 있다.
import hashlib
사용법
기본적인 사용법은 다음과 같다.
# 사용할 해시 알고리즘의 생성자를 호출한다.
m = hashlib.sha256()
# 해싱할 값 전달
# 값은 바이트로 전달
# 값을 반복해서 전달하면 계속 이어붙이는 방식으로 동작한다.
m.update(b"Nobody inspects")
m.update(b" the spammish repetition")
# 해싱
print(m.hexdigest())
print(m.digest())
참고로 hexdigest는 해시 값을 16진수로 변환한 문자열을 반환한다. 만약 16진수로 변환하지 않은 바이트 문자열을 얻고 싶다면 digest 함수를 사용하면 된다.
위 코드를 한 줄로 압축하여 표현하면 다음과 같다.
print(hashlib.sha256(b"Nobody inspects").hexdigest())
print(hashlib.sha256(b"Nobody inspects").digest())