Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python hashlib 모듈로 배우는 보안 해시와 메시지 다이제스트

파이썬에서 보안 해시(Secure Hash)와 메시지 다이제스트(Message Digest)를 처리하려면 hashlib 모듈을 사용해야 합니다. 이 모듈은 SHA1, SHA224, SHA256, SHA512 등 다양한 보안 해시 알고리즘과 RSA의 MD5 알고리즘에 대해 공통된 인터페이스를 제공합니다. 참고로 과거 방식의 알고리즘들은 '메시지 다이제스트'라 불렸으며, 새로운 방식들은 '보안 해시'라고 지칭합니다.

hashlib 모듈을 사용하려면 파이썬 코드에서 먼저 모듈을 임포트해야 합니다.

import hashlib

이 모듈에는 md5, sha1, sha224, sha256, sha512처럼 사전에 정의된 알고리즘이 포함되어 있으며, 필요하다면 OpenSSL 라이브러리에서 추가 알고리즘을 가져와 사용할 수도 있습니다.

아래에서 hashlib 모듈의 주요 상수와 메서드를 살펴보겠습니다.

상수 hashlib.algorithms_guaranteed

모든 플랫폼에서 이 모듈이 지원한다고 보장되는 해시 알고리즘의 이름을 반환합니다.

상수 hashlib.algorithms_available

현재 실행 중인 파이썬 인터프리터에서 실제로 사용 가능한 해시 알고리즘의 이름을 반환합니다.

상수 hashlib.digest_size

생성된 해시 결과의 크기를 바이트 단위로 반환합니다.

상수 hashlib.block_size

해시 알고리즘의 내부 블록 크기를 바이트 단위로 반환합니다.

메서드 hashlib.new(name[, data])

해시 객체를 생성하는 생성자입니다. 첫 번째 인자로 원하는 알고리즘 이름을 받으며, 사전 정의된 해시나 OpenSSL 라이브러리의 다른 알고리즘을 사용할 수 있습니다.

메서드 hashlib.update(arg)

주어진 인자로 해시 객체를 갱신합니다. 이 함수를 여러 번 호출하는 것은 연결된 인자로 한 번 호출하는 것과 동일한 결과를 냅니다.

메서드 hashlib.digest()

update() 메서드를 통해 전달된 데이터의 다이제스트 결과를 반환합니다. 반환되는 바이트 객체의 크기는 digest_size와 같으며, 0부터 255까지의 전체 바이트 범위 값을 포함할 수 있습니다.

메서드 hashlib.hexdigest()

digest() 메서드와 동일하게 동작하지만, 결과가 오직 16진수 값으로만 구성됩니다. 이 덕분에 인터넷을 통해 데이터를 손쉽게 전송할 수 있어 실무에서 널리 활용됩니다.

예제 코드

import hashlib
my_hash1 = hashlib.md5() # md5 선택 후 바이트 데이터로 갱신
update_bytes = b'Python123'
my_hash1.update(update_bytes)
print("Result after digesting: " + str(my_hash1.hexdigest()))
print("Digest Size: " + str(my_hash1.digest_size))
my_hash2 = hashlib.sha256() # 동일한 바이트 데이터로 SHA256 선택
my_hash2.update(update_bytes)
print("Result after digesting: " + str(my_hash2.hexdigest()))
print("Digest Size: " + str(my_hash2.digest_size))

실행 결과

Result after digesting: ae35eacb1cb6f6d38c29a04ecb2d7471
Digest Size: 16
Result after digesting: bba32ba33d6a7f3e02a96e2d7ee6860765780aee42b878007369e373ff419b1e
Digest Size: 32

실행 결과에서 확인할 수 있듯이, MD5는 16바이트(128비트)의 다이제스트를, SHA256은 32바이트(256비트)의 다이제스트를 생성합니다. 같은 입력 데이터라도 사용하는 알고리즘에 따라 해시 길이와 결과값이 완전히 달라지며, 이러한 특성 덕분에 hashlib 모듈은 비밀번호 검증, 데이터 무결성 확인 등 다양한 보안 작업에 폭넓게 활용됩니다.