푸터 콘텐츠로 바로가기
PYTHON 도움말

hashlib Python (작동 방식: 개발자 가이드)

Python의 hashlib 모듈은 안전한 해시 및 메시지 다이제스트 알고리즘을 다루는 데 유용한 강력한 도구입니다. 이 모듈은 다양한 보안 해시 알고리즘에 대한 표준 인터페이스를 제공하므로 데이터 무결성 및 보안을 보장해야 하는 개발자에게 다용도로 활용할 수 있는 선택지입니다. 이 글 후반부에서는 IronSoftware 에서 제공하는 다재다능한 PDF 생성 라이브러리인 IronPDF 에 대해서도 살펴보고, 두 라이브러리를 모두 사용하여 사용법을 보여주는 스크립트를 작성해 보겠습니다.

hashlib 모듈은 Python 표준 라이브러리의 일부이므로 별도로 설치할 필요가 없습니다. 여기에는 MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 및 SHA-3 시리즈와 같은 다양한 암호화 해시 함수가 포함됩니다. 이 함수들은 해시 객체를 생성하는 데 사용되며, 생성된 해시 객체를 이용하여 데이터의 해시값을 생성할 수 있습니다.

주요 특징

  1. 다양한 알고리즘 지원: hashlib은 MD5 및 SHA-1과 같은 기존 알고리즘부터 SHA-256 및 SHA-3과 같은 최신 알고리즘까지 다양한 해시 알고리즘을 지원합니다.
  2. 간단한 인터페이스: 각 해시 알고리즘은 해시 객체를 반환하는 생성자 메서드를 가지고 있습니다. 이 객체는 update 메서드를 사용하여 데이터를 입력받을 수 있으며, digest 또는 hexdigest 메서드를 사용하여 해시 값을 생성할 수 있습니다.
  3. 보안: 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: 6fc0c7d6af8eb51f0cd89281db55c6a6b76b5310226fa5af2272a8eb42cc1bfe
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: 6fc0c7d6af8eb51f0cd89281db55c6a6b76b5310226fa5af2272a8eb42cc1bfe
PYTHON

고급 기능

  • 멀티스레딩 지원: 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: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
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: dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
PYTHON

이 코드는 입력 데이터에 대한 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): 374d794a95cdcfd8b35993185fef9ba368f160d8daf432d08ba9f1ed1e5abe6cc69291e0fa2fe0006a52570ef18c19def4e617c33ce52ef0a6e5fbe318cb0387
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): 374d794a95cdcfd8b35993185fef9ba368f160d8daf432d08ba9f1ed1e5abe6cc69291e0fa2fe0006a52570ef18c19def4e617c33ce52ef0a6e5fbe318cb0387
PYTHON

이 코드는 제공된 데이터를 사용하여 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: 3d363ff7401e02026f4a4687d4863ced
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: 3d363ff7401e02026f4a4687d4863ced
PYTHON

이 코드는 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): a2a3c1a30a2add1867d55eac97fd9c84dc679691c0f15ae09c01e1bcc63ba47a
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): a2a3c1a30a2add1867d55eac97fd9c84dc679691c0f15ae09c01e1bcc63ba47a
PYTHON

이 예제들은 서로 다른 다이제스트 크기를 사용한 기본적인 해싱 방법을 다룹니다. 특정 요구 사항이나 선호도에 따라 다른 알고리즘이나 매개변수를 사용하는 등 조정할 수 있습니다.

실제 적용 사례

  1. 데이터 무결성: 해시 함수는 일반적으로 레코드의 무결성을 확인하는 데 사용됩니다. 원본 데이터의 해시값과 수신된 데이터의 해시값을 비교함으로써 데이터가 변조되지 않았음을 확인할 수 있습니다.
  2. 비밀번호 저장: 비밀번호를 안전하게 저장하기 위해 해시 함수가 자주 사용됩니다. 시스템은 실제 비밀번호 대신 비밀번호의 해시값을 저장합니다. 사용자가 로그인할 때 입력한 비밀번호의 해시값이 저장된 해시값과 비교됩니다.
  3. 디지털 서명: 해시 함수는 메시지의 진위와 무결성을 검증하는 디지털 서명을 생성하는 데 일반적으로 사용됩니다.

IronPDF 소개합니다

hashlib Python ((How It Works: A Guide for Developers)): 그림 1 - IronPDF for Python: The Python PDF Library

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 , PythonNode.js 버전으로도 제공됩니다.

편집 및 서명

IronPDF 사용하면 사용자는 속성을 설정하고, 암호 및 권한 으로 보안을 추가하고, PDF에 디지털 서명을 적용할 수 있습니다.

페이지 템플릿 및 설정

IronPDF 사용하면 머리글, 바닥글, 페이지 번호 및 조정 가능한 여백을 사용하여 PDF 문서를 사용자 지정할 수 있습니다. 또한 반응형 레이아웃과 사용자 지정 용지 크기를 지원합니다.

표준 준수

IronPDF 패키지는 PDF/A 및 PDF/UA와 같은 PDF 표준을 준수합니다. 이 라이브러리는 UTF-8 문자 인코딩을 지원하며 이미지, CSS, 글꼴과 같은 자산을 처리합니다.

IronPDF 및 HashLib 모듈을 사용하여 PDF 문서를 생성합니다.

IronPDF 필수 조건

  1. IronPDF 기반 기술로 .NET 6.0을 사용합니다. 그러므로 시스템에 .NET 6.0 런타임이 설치되어 있는지 확인하십시오.
  2. Python 3.0 이상: Python 버전 3 이상이 설치되어 있어야 합니다.
  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

코드 설명

제공된 코드는 Python의 hashlib 라이브러리를 사용하여 다양한 해싱 기술의 사용 방법을 보여줍니다:

  1. 간단한 해싱 예제: 특정 데이터 문자열의 SHA-256 해시를 계산합니다 (b'IronPDF from Iron Software is Awesome').
  2. 서로 다른 다이제스트 크기를 사용한 해싱: 이 섹션에서는 동일한 데이터 문자열에 대해 MD5, SHA-256 및 SHA-512 알고리즘을 사용한 해싱을 보여줍니다.
  3. 키드 해싱 예제: 이 예제는 지정된 키 (b'pseudorandom key')와 함께 blake2b 해시 함수를 사용하여 데이터의 키드 해싱을 수행합니다.
  4. 무작위 해싱 예시: SHA-256과 PBKDF2-HMAC 알고리즘을 사용하여 무작위로 생성된 솔트를 이용해 무작위 해시값을 생성합니다.
  5. PDF 생성: 해싱 예제를 시연한 후, 코드는 IronPDF 사용하여 해싱 예제를 보여주는 HTML 콘텐츠가 포함된 PDF 문서를 생성합니다.

각 예시는 표준 해싱, 키 해싱, 무작위 해싱 기법과 같은 암호화 해싱의 다양한 측면을 보여줍니다.

출력

hashlib Python ((How It Works: A Guide for Developers)): 그림 2 - 예시 콘솔 출력

PDF

hashlib Python ((How It Works: A Guide for Developers)): 그림 3 - IronPDF를 사용한 예제 PDF 출력

IronPDF 라이선스

hashlib Python ((How It Works: A Guide for Developers)): 그림 4 - 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"
PYTHON

결론

hashlib 모듈은 Python 표준 라이브러리에 필수적인 요소로, 다양한 응용 분야에 강력하고 안전한 해시 함수를 제공합니다. 데이터 무결성을 보장하든, 비밀번호를 안전하게 저장하든, 디지털 서명을 생성하든 hashlib은 필요한 도구를 제공합니다. 반면에 IronPDF 는 강력한 PDF 생성 및 PDF 조작 라이브러리입니다. 이 두 라이브러리를 사용하면 개발자는 해시를 신속하게 생성하고 PDF 형식으로 저장할 수 있습니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해