파이썬 해싱으로 암호화하기
해싱의 세 가지 특징으로 데이터를 암호화하는 데 활용할 수 있다.
- 고정된 크기: 입력 데이터 크기에 상관없이 결과 해시값은 일정한 길이를 가짐.
- 단방향성: 해시값에서 원래 데이터를 복구할 수 없음.
- 충돌 방지: 서로 다른 입력값이 동일한 해시값을 생성할 확률이 매우 낮음.
※ 해싱(Hashing)은 데이터를 고정된 크기의 해시값(hash)으로 변환하는 과정이다. 이때 사용되는 수학적 알고리즘을 해시 함수(Hash Function) 라고 한다.
코드를 통해 좀 더 자세히 알아보자.
먼저, 해시 hashlib 모듈를 임포트한다.
import hashlib
해싱할 문자열 데이터를 정의한다.
data = "Hello, Python!"
다양한 해시 알고리즘 중에서 SHA-256 해시 객체를 생성한다.
※ SHA-256은 현재 가장 많이 사용되는 해싱 암호화인 SHA 중에서 고정된 256비트 크기의 해시를 생성하는 암호화 해시 함수다. 동일한 입력값에 대해 항상 동일한 출력값을 생성하고(결정론적) 입력값이 조금이라도 변경되면 완전히 다른 출력값이 생성된다(해시의 민감성).
hash_object = hashlib.sha256(data.encode())
hashlib.sha256() 함수는 주어진 인수를 해시 객체로 생성한다. 이 함수는 입력 데이터에 대해 고유한 256비트(32바이트) 해시값을 생성합니다.
단, 해시 함수는 바이트 데이터만 처리할 수 있다. 그래서 문자열 데이터를 해싱하려면, 먼저 data.encode()를 호출하여 문자열을 바이트 데이터로 변환해야 한다.
SHA-256 해시값은 내부적으로 256비트의 이진 데이터로 표현된다.
이를 사람이 읽기 쉬운 16진수 문자열로 변환한다.
hex_dig = hash_object.hexdigest()
hexdigest() 메서드를 활용하면 쉽게 16진수 문자열로 해시값이 변환된다.
최종 값을 확인해보자.
print("SHA-256 해시:", hex_dig)
다음과 같은 결과가 출력된다:
SHA-256 해시: 1b7f7c3bb6f6fb3cf221dbace64f4d98d1403a8c3bd90aee5b7f95b5ab07798c
출력된 값은 Hello, Python! 문자열에 대해 SHA-256 알고리즘으로 생성된 고유한 해시값이다.