hashlib Python (작동 방식: 개발자 가이드)
Python의 hashlib 모듈은 안전한 해시 및 메시지 다이제스트 알고리즘을 다루는 데 유용한 강력한 도구입니다. 이 모듈은 다양한 보안 해시 알고리즘에 대한 표준 인터페이스를 제공하므로 데이터 무결성 및 보안을 보장해야 하는 개발자에게 다용도로 활용할 수 있는 선택지입니다. 이 글 후반부에서는 IronSoftware 에서 제공하는 다재다능한 PDF 생성 라이브러리인 IronPDF 에 대해서도 살펴보고, 두 라이브러리를 모두 사용하여 사용법을 보여주는 스크립트를 작성해 보겠습니다.
hashlib 모듈은 Python 표준 라이브러리의 일부이므로 별도로 설치할 필요가 없습니다. 여기에는 MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 및 SHA-3 시리즈와 같은 다양한 암호화 해시 함수가 포함됩니다. 이 함수들은 해시 객체를 생성하는 데 사용되며, 생성된 해시 객체를 이용하여 데이터의 해시값을 생성할 수 있습니다.
주요 특징
- 다양한 알고리즘 지원: hashlib은 MD5 및 SHA-1과 같은 기존 알고리즘부터 SHA-256 및 SHA-3과 같은 최신 알고리즘까지 다양한 해시 알고리즘을 지원합니다.
- 간단한 인터페이스: 각 해시 알고리즘은 해시 객체를 반환하는 생성자 메서드를 가지고 있습니다. 이 객체는 update 메서드를 사용하여 데이터를 입력받을 수 있으며, digest 또는 hexdigest 메서드를 사용하여 해시 값을 생성할 수 있습니다.
- 보안: MD5 및 SHA-1과 같은 일부 알고리즘에는 알려진 취약점이 있지만, hashlib에는 SHA-256 및 SHA-3과 같은 더 안전한 옵션이 포함되어 있습니다.
설치
hashlib 은 내장 모듈이므로 명시적인 설치가 필요하지 않습니다.
기본 사용법
다음은 hashlib 의 해시 생성자를 사용하여 SHA-256 해시를 생성하는 간단한 예입니다.
import hashlib
# Creating hash objects with SHA-256
hash_object = hashlib.sha256()
# Update the hash object with data
hash_object.update(b'IronPDF from Iron Software is Awesome')
# Get the hexadecimal representation of the hash
hash_hex = hash_object.hexdigest() # hash_hex is the hexadecimal digest
print(hash_hex) # Output the hash
# Output: 6fc0c7d6af8eb51f0cd89281db55c6a6b76b5310226fa5af2272a8eb42cc1bfeimport hashlib
# Creating hash objects with SHA-256
hash_object = hashlib.sha256()
# Update the hash object with data
hash_object.update(b'IronPDF from Iron Software is Awesome')
# Get the hexadecimal representation of the hash
hash_hex = hash_object.hexdigest() # hash_hex is the hexadecimal digest
print(hash_hex) # Output the hash
# Output: 6fc0c7d6af8eb51f0cd89281db55c6a6b76b5310226fa5af2272a8eb42cc1bfe고급 기능
- 멀티스레딩 지원: hashlib는 암호화 해시 함수를 사용할 때, 한 번에 2047바이트 이상의 데이터가 제공되면 해시 계산 중에 전역 인터프리터 잠금(GIL)을 해제하여 멀티스레드 애플리케이션에서 더 나은 성능을 제공합니다.
- 사용자 지정 해시 알고리즘: Python 배포판의 hashlib이 추가 알고리즘을 제공하는 OpenSSL 빌드에 링크되어 있는 경우 new() 메서드를 통해 해당 알고리즘에 접근할 수 있습니다.
HashLib 모듈을 사용한 다양한 해싱 유형
1. 단순 해싱
import hashlib
# Simple hashing example
data = b'Hello, World!'
hash_object = hashlib.sha256(data)
hex_dig = hash_object.hexdigest()
print("SHA-256 Hash:", hex_dig)
# Output: SHA-256 Hash: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986fimport hashlib
# Simple hashing example
data = b'Hello, World!'
hash_object = hashlib.sha256(data)
hex_dig = hash_object.hexdigest()
print("SHA-256 Hash:", hex_dig)
# Output: SHA-256 Hash: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f이 코드는 입력 데이터에 대한 SHA-256 해시값을 생성합니다.
2. 서로 다른 다이제스트 크기 사용
import hashlib
# Hashing with different digest sizes
data = b'Hello, World!'
# MD5, SHA-256, and SHA-512 hash generation
hash_md5 = hashlib.md5(data).hexdigest()
hash_sha256 = hashlib.sha256(data).hexdigest()
hash_sha512 = hashlib.sha512(data).hexdigest()
# Print each hash
print("MD5 Hash (hex):", hash_md5)
print("SHA-256 Hash (hex):", hash_sha256)
print("SHA-512 Hash (hex):", hash_sha512)
# Output:
# MD5 Hash (hex): 65a8e27d8879283831b664bd8b7f0ad4
# SHA-256 Hash (hex): dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
# SHA-512 Hash (hex): 374d794a95cdcfd8b35993185fef9ba368f160d8daf432d08ba9f1ed1e5abe6cc69291e0fa2fe0006a52570ef18c19def4e617c33ce52ef0a6e5fbe318cb0387import hashlib
# Hashing with different digest sizes
data = b'Hello, World!'
# MD5, SHA-256, and SHA-512 hash generation
hash_md5 = hashlib.md5(data).hexdigest()
hash_sha256 = hashlib.sha256(data).hexdigest()
hash_sha512 = hashlib.sha512(data).hexdigest()
# Print each hash
print("MD5 Hash (hex):", hash_md5)
print("SHA-256 Hash (hex):", hash_sha256)
print("SHA-512 Hash (hex):", hash_sha512)
# Output:
# MD5 Hash (hex): 65a8e27d8879283831b664bd8b7f0ad4
# SHA-256 Hash (hex): dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
# SHA-512 Hash (hex): 374d794a95cdcfd8b35993185fef9ba368f160d8daf432d08ba9f1ed1e5abe6cc69291e0fa2fe0006a52570ef18c19def4e617c33ce52ef0a6e5fbe318cb0387이 코드는 제공된 데이터를 사용하여 MD5, SHA-256 및 SHA-512 해시값을 생성합니다.
3. 키 해싱
import hashlib
from hashlib import blake2b
# Keyed hashing example
h = blake2b(key=b'pseudorandom key', digest_size=16)
h.update(b'message data')
print(h.hexdigest())
# Output: 3d363ff7401e02026f4a4687d4863cedimport hashlib
from hashlib import blake2b
# Keyed hashing example
h = blake2b(key=b'pseudorandom key', digest_size=16)
h.update(b'message data')
print(h.hexdigest())
# Output: 3d363ff7401e02026f4a4687d4863ced이 코드는 Blake2b 알고리즘을 사용하여 키 기반 해시를 생성하는 방법을 보여줍니다.
4. 무작위 해싱
import hashlib
import os
# Randomized hashing example using PBKDF2-HMAC
data = b'Hello, World!'
salt = os.urandom(16) # Generate a random salt
hash_object = hashlib.pbkdf2_hmac('sha256', data, salt, 100000)
hex_dig = hash_object.hex()
print("Randomized Hash (SHA-256):", hex_dig)
# Output: Randomized Hash (SHA-256): a2a3c1a30a2add1867d55eac97fd9c84dc679691c0f15ae09c01e1bcc63ba47aimport hashlib
import os
# Randomized hashing example using PBKDF2-HMAC
data = b'Hello, World!'
salt = os.urandom(16) # Generate a random salt
hash_object = hashlib.pbkdf2_hmac('sha256', data, salt, 100000)
hex_dig = hash_object.hex()
print("Randomized Hash (SHA-256):", hex_dig)
# Output: Randomized Hash (SHA-256): a2a3c1a30a2add1867d55eac97fd9c84dc679691c0f15ae09c01e1bcc63ba47a이 예제들은 서로 다른 다이제스트 크기를 사용한 기본적인 해싱 방법을 다룹니다. 특정 요구 사항이나 선호도에 따라 다른 알고리즘이나 매개변수를 사용하는 등 조정할 수 있습니다.
실제 적용 사례
- 데이터 무결성: 해시 함수는 일반적으로 레코드의 무결성을 확인하는 데 사용됩니다. 원본 데이터의 해시값과 수신된 데이터의 해시값을 비교함으로써 데이터가 변조되지 않았음을 확인할 수 있습니다.
- 비밀번호 저장: 비밀번호를 안전하게 저장하기 위해 해시 함수가 자주 사용됩니다. 시스템은 실제 비밀번호 대신 비밀번호의 해시값을 저장합니다. 사용자가 로그인할 때 입력한 비밀번호의 해시값이 저장된 해시값과 비교됩니다.
- 디지털 서명: 해시 함수는 메시지의 진위와 무결성을 검증하는 디지털 서명을 생성하는 데 일반적으로 사용됩니다.
IronPDF 소개합니다

IronPDF 는 HTML, CSS, 이미지 및 JavaScript 사용하여 PDF를 생성, 편집 및 서명할 수 있는 강력한 Python 라이브러리입니다. 이 제품은 최소한의 메모리 사용량으로 고성능을 제공합니다. 사용자는 HTML에서 PDF를 생성하고 , PDF 문서를 병합 또는 분할하고 , PDF에서 텍스트와 이미지를 추출하고 , 워터마크를 적용하고, PDF를 JPEG 및 PNG와 같은 이미지 형식으로 래스터화하고 , PDF 파일을 암호화하는 등 다양한 작업을 수행할 수 있습니다. IronPDF 다양한 PDF 작업 기능을 제공합니다.
IronPDF 의 주요 기능
HTML을 PDF로 변환
사용자는 HTML 파일, HTML 문자열 및 URL을 PDF로 변환할 수 있습니다. 예를 들어, IronPDF 의 Chrome PDF 렌더러를 사용하여 웹페이지를 PDF로 렌더링할 수 있습니다 .
크로스 플랫폼 지원
IronPDF 는 Python 3 이상 버전을 위해 설계되었으며 Windows, Mac, Linux 또는 클라우드 플랫폼에서 실행됩니다.
IronPDF 는 .NET , Java , Python 및 Node.js 버전으로도 제공됩니다.
편집 및 서명
IronPDF 사용하면 사용자는 속성을 설정하고, 암호 및 권한 으로 보안을 추가하고, PDF에 디지털 서명을 적용할 수 있습니다.
페이지 템플릿 및 설정
IronPDF 사용하면 머리글, 바닥글, 페이지 번호 및 조정 가능한 여백을 사용하여 PDF 문서를 사용자 지정할 수 있습니다. 또한 반응형 레이아웃과 사용자 지정 용지 크기를 지원합니다.
표준 준수
IronPDF 패키지는 PDF/A 및 PDF/UA와 같은 PDF 표준을 준수합니다. 이 라이브러리는 UTF-8 문자 인코딩을 지원하며 이미지, CSS, 글꼴과 같은 자산을 처리합니다.
IronPDF 및 HashLib 모듈을 사용하여 PDF 문서를 생성합니다.
IronPDF 필수 조건
- IronPDF 기반 기술로 .NET 6.0을 사용합니다. 그러므로 시스템에 .NET 6.0 런타임이 설치되어 있는지 확인하십시오.
- Python 3.0 이상: Python 버전 3 이상이 설치되어 있어야 합니다.
- Pip: IronPDF 패키지를 설치하려면 Python Install-Package 프로그램인 pip를 설치하세요.
먼저 스크립트를 추가할 Python 파일을 만들어 보겠습니다. 이 예제에서는 코드 편집기로 Visual Studio Code를 사용합니다.
Visual Studio Code를 열고 hashlibDemo.py라는 파일을 생성하세요.
IronPDF 라이브러리를 설치하세요:
pip install ironpdf
다음으로 아래 코드를 추가하여 IronPDF 및 Hashlib Python 패키지의 사용법을 보여주세요.
import hashlib
import os
from hashlib import blake2b
from ironpdf import *
# Apply your license key
License.LicenseKey = "your key"
# Create a PDF from a HTML string using Python
content = "<h1>Awesome Iron PDF with hashlib</h1>"
content += "<p>Data for all the below examples = IronPDF from Iron Software is Awesome</p>"
content += "<h2> Simple hashing example</h2>"
# Simple hashing example
data = b'IronPDF from Iron Software is Awesome'
content += "<p>hashlib.sha256(data)</p>"
hash_object = hashlib.sha256(data)
hex_dig = hash_object.hexdigest()
print("SHA-256 Hash:", hex_dig)
content += "<p>SHA-256 Hash:"+str(hex_dig)+"</p>"
content += "<h2> Hashing with different digest sizes</h2>"
# Hashing with different digest sizes
hash_md5 = hashlib.md5(data).hexdigest()
content += "<p>hashlib.md5(data).hexdigest()</p>"
hash_sha256 = hashlib.sha256(data).hexdigest()
content += "<p>hashlib.sha256(data).hexdigest()</p>"
hash_sha512 = hashlib.sha512(data).hexdigest()
content += "<p>hashlib.sha512(data).hexdigest()</p>"
print("MD5 Hash (hex):", hash_md5)
print("SHA-256 Hash (hex):", hash_sha256)
print("SHA-512 Hash (hex):", hash_sha512)
content += "<p>MD5 Hash (hex):"+str(hash_md5)+"</p>"
content += "<p>SHA-256 Hash (hex):"+str(hash_sha256)+"</p>"
content += "<p>SHA-512 Hash (hex):"+str(hash_sha512)+"</p>"
# Keyed hashing example
content += "<h2> Keyed hashing example</h2>"
h = blake2b(key=b'pseudorandom key', digest_size=16)
content += "<p></p>"
h.update(data)
print(h.hexdigest())
content += "<p>Keyed Hash (hex):"+str(h.hexdigest())+"</p>"
# Randomized hashing example
content += "<h2> Randomized hashing example </h2>"
salt = os.urandom(16) # Generate a random salt
hash_object = hashlib.pbkdf2_hmac('sha256', data, salt, 100000)
content += "<p>hashlib.pbkdf2_hmac('sha256', data, salt, 100000)</p>"
hex_dig = hash_object.hex()
print("Randomized Hash (SHA-256):", hex_dig)
content += "<p>Randomized Hash (SHA-256):"+str(hex_dig)+"</p>"
# Generate PDF using IronPDF
renderer = ChromePdfRenderer()
pdf = renderer.RenderHtmlAsPdf(content)
# Export to a file or Stream
pdf.SaveAs("Demo-hashlib.pdf")import hashlib
import os
from hashlib import blake2b
from ironpdf import *
# Apply your license key
License.LicenseKey = "your key"
# Create a PDF from a HTML string using Python
content = "<h1>Awesome Iron PDF with hashlib</h1>"
content += "<p>Data for all the below examples = IronPDF from Iron Software is Awesome</p>"
content += "<h2> Simple hashing example</h2>"
# Simple hashing example
data = b'IronPDF from Iron Software is Awesome'
content += "<p>hashlib.sha256(data)</p>"
hash_object = hashlib.sha256(data)
hex_dig = hash_object.hexdigest()
print("SHA-256 Hash:", hex_dig)
content += "<p>SHA-256 Hash:"+str(hex_dig)+"</p>"
content += "<h2> Hashing with different digest sizes</h2>"
# Hashing with different digest sizes
hash_md5 = hashlib.md5(data).hexdigest()
content += "<p>hashlib.md5(data).hexdigest()</p>"
hash_sha256 = hashlib.sha256(data).hexdigest()
content += "<p>hashlib.sha256(data).hexdigest()</p>"
hash_sha512 = hashlib.sha512(data).hexdigest()
content += "<p>hashlib.sha512(data).hexdigest()</p>"
print("MD5 Hash (hex):", hash_md5)
print("SHA-256 Hash (hex):", hash_sha256)
print("SHA-512 Hash (hex):", hash_sha512)
content += "<p>MD5 Hash (hex):"+str(hash_md5)+"</p>"
content += "<p>SHA-256 Hash (hex):"+str(hash_sha256)+"</p>"
content += "<p>SHA-512 Hash (hex):"+str(hash_sha512)+"</p>"
# Keyed hashing example
content += "<h2> Keyed hashing example</h2>"
h = blake2b(key=b'pseudorandom key', digest_size=16)
content += "<p></p>"
h.update(data)
print(h.hexdigest())
content += "<p>Keyed Hash (hex):"+str(h.hexdigest())+"</p>"
# Randomized hashing example
content += "<h2> Randomized hashing example </h2>"
salt = os.urandom(16) # Generate a random salt
hash_object = hashlib.pbkdf2_hmac('sha256', data, salt, 100000)
content += "<p>hashlib.pbkdf2_hmac('sha256', data, salt, 100000)</p>"
hex_dig = hash_object.hex()
print("Randomized Hash (SHA-256):", hex_dig)
content += "<p>Randomized Hash (SHA-256):"+str(hex_dig)+"</p>"
# Generate PDF using IronPDF
renderer = ChromePdfRenderer()
pdf = renderer.RenderHtmlAsPdf(content)
# Export to a file or Stream
pdf.SaveAs("Demo-hashlib.pdf")코드 설명
제공된 코드는 Python의 hashlib 라이브러리를 사용하여 다양한 해싱 기술의 사용 방법을 보여줍니다:
- 간단한 해싱 예제: 특정 데이터 문자열의 SHA-256 해시를 계산합니다 (
b'IronPDF from Iron Software is Awesome'). - 서로 다른 다이제스트 크기를 사용한 해싱: 이 섹션에서는 동일한 데이터 문자열에 대해 MD5, SHA-256 및 SHA-512 알고리즘을 사용한 해싱을 보여줍니다.
- 키드 해싱 예제: 이 예제는 지정된 키 (
b'pseudorandom key')와 함께blake2b해시 함수를 사용하여 데이터의 키드 해싱을 수행합니다. - 무작위 해싱 예시: SHA-256과 PBKDF2-HMAC 알고리즘을 사용하여 무작위로 생성된 솔트를 이용해 무작위 해시값을 생성합니다.
- PDF 생성: 해싱 예제를 시연한 후, 코드는 IronPDF 사용하여 해싱 예제를 보여주는 HTML 콘텐츠가 포함된 PDF 문서를 생성합니다.
각 예시는 표준 해싱, 키 해싱, 무작위 해싱 기법과 같은 암호화 해싱의 다양한 측면을 보여줍니다.
출력


IronPDF 라이선스

IronPDF Python 라이선스 키로 실행됩니다. IronPDF for Python은 사용자가 구매 전에 다양한 기능을 테스트해 볼 수 있도록 무료 평가판 라이선스 키를 제공합니다.
IronPDF 패키지를 사용하기 전에 스크립트 시작 부분에 라이선스 키를 배치하십시오.
from ironpdf import *
# Apply your license key
License.LicenseKey = "key"from ironpdf import *
# Apply your license key
License.LicenseKey = "key"결론
hashlib 모듈은 Python 표준 라이브러리에 필수적인 요소로, 다양한 응용 분야에 강력하고 안전한 해시 함수를 제공합니다. 데이터 무결성을 보장하든, 비밀번호를 안전하게 저장하든, 디지털 서명을 생성하든 hashlib은 필요한 도구를 제공합니다. 반면에 IronPDF 는 강력한 PDF 생성 및 PDF 조작 라이브러리입니다. 이 두 라이브러리를 사용하면 개발자는 해시를 신속하게 생성하고 PDF 형식으로 저장할 수 있습니다.










