Przejdź do treści stopki
POMOC DOTYCZąCA JęZYKA PYTHON

hashlib Python (Jak działa: Przewodnik dla programistów)

Moduł hashlib w języku Python jest potężnym narzędziem do pracy z algorytmami bezpiecznego haszowania i skrótów wiadomości. Moduł ten zapewnia standardowy interfejs do wielu bezpiecznych algorytmów skrótu, co czyni go wszechstronnym wyborem dla programistów, którzy muszą zapewnić integralność i bezpieczeństwo danych. W dalszej części artykułu przyjrzymy się również wszechstronnej bibliotece do generowania plików PDF firmy IronSoftware o nazwie IronPDF i napiszemy skrypt wykorzystujący obie biblioteki, aby zademonstrować ich zastosowanie.

Moduł hashlib jest częścią standardowej biblioteki języka Python, więc nie ma potrzeby instalowania go osobno. Obejmuje ona różne kryptograficzne funkcje skrótu, takie jak MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 oraz serię SHA-3. Funkcje te służą do tworzenia obiektów hash, które można następnie wykorzystać do generowania skrótów danych.

Najważniejsze cechy

  1. Szeroki zakres algorytmów: hashlib obsługuje wiele algorytmów skrótu, w tym starsze, takie jak MD5 i SHA-1, oraz nowsze, takie jak SHA-256 i SHA-3.
  2. Prosty interfejs: Każdy algorytm skrótu posiada metodę konstruktora, która zwraca obiekt skrótu. Obiekt ten można zasilić danymi za pomocą metody update i wygenerować wartość skrótu za pomocą metod digest lub hexdigest.
  3. Bezpieczeństwo: Chociaż niektóre algorytmy, takie jak MD5 i SHA-1, mają znane luki w zabezpieczeniach, hashlib zawiera bezpieczniejsze opcje, takie jak SHA-256 i SHA-3.

Instalacja

hashlib jest wbudowanym modułem i nie wymaga osobnej instalacji.

Podstawowe zastosowanie

Oto prosty przykład wykorzystania biblioteki hashlib do wygenerowania skrótu SHA-256 przy użyciu konstruktora skrótu hashlib:

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

Zaawansowane funkcje

  • Obsługa wielowątkowości: Dzięki kryptograficznej funkcji skrótu hashlib zwalnia blokadę Global Interpreter Lock (GIL) podczas obliczania skrótu, jeśli dostarczonych zostanie jednocześnie więcej niż 2047 bajtów danych, co pozwala na lepszą wydajność w aplikacjach wielowątkowych.
  • Niestandardowe algorytmy skrótu: Jeśli biblioteka hashlib w Twojej dystrybucji Pythona jest połączona z kompilacją OpenSSL, która udostępnia dodatkowe algorytmy, możesz uzyskać do nich dostęp za pomocą metody new().

Różne rodzaje haszowania przy użyciu modułu HashLib

1. Proste haszowanie

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

Kod generuje skrót SHA-256 dla danych wejściowych.

2. Korzystanie z różnych rozmiarów skrótów

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

Kod generuje skróty dla algorytmów MD5, SHA-256 i SHA-512 na podstawie dostarczonych danych.

3. Hashing kluczem

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

Ten kod pokazuje tworzenie skrótu z kluczem przy użyciu algorytmu Blake2b.

4. Losowe haszowanie

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

Te przykłady obejmują podstawowe haszowanie przy użyciu różnych rozmiarów skrótów. Można wprowadzać zmiany w oparciu o konkretne wymagania lub preferencje, takie jak użycie innych algorytmów lub parametrów.

Zastosowania praktyczne

  1. Integralność danych: Funkcje skrótu są zazwyczaj używane do potwierdzania integralności rekordów. Porównując skrót danych oryginalnych ze skrótem danych otrzymanych, można upewnić się, że dane nie zostały zmienione.
  2. Przechowywanie haseł: Funkcje skrótu są często wykorzystywane do bezpiecznego przechowywania haseł. System przechowuje skrót hasła zamiast samego hasła. Gdy użytkownik się loguje, skrót wprowadzonego hasła jest porównywany ze skrótem zapisanym w pamięci.
  3. Podpisy cyfrowe: Funkcje skrótu są powszechnie używane do tworzenia podpisów cyfrowych, które weryfikują autentyczność i integralność wiadomości.

Przedstawiamy IronPDF

hashlib Python ((Jak to działa: przewodnik dla programistów)): Rysunek 1 — IronPDF for Python: biblioteka PDF dla języka Python

IronPDF to potężna biblioteka w języku Python służąca do tworzenia, edycji i podpisywania plików PDF przy użyciu HTML, CSS, obrazów i JavaScript. Zapewnia wysoką wydajność przy minimalnym zużyciu pamięci. Użytkownicy mogą generować pliki PDF z HTML, łączyć lub dzielić dokumenty PDF, wyodrębniać tekst i obrazy z plików PDF, nakładać znaki wodne, rasteryzować pliki PDF do formatów obrazów, takich jak JPEG i PNG, szyfrować pliki PDF i nie tylko. IronPDF oferuje szeroki zakres operacji na plikach PDF.

Najważniejsze funkcje IronPDF

Konwersja HTML do PDF

Użytkownicy mogą konwertować pliki HTML, ciągi znaków HTML i adresy URL do formatu PDF. Na przykład, renderuj stronę internetową jako plik PDF przy użyciu renderera PDF dla przeglądarki Chrome firmy IronPDF.

Obsługa wielu platform

IronPDF jest przeznaczony dla wersji Python 3+ i działa na systemach Windows, Mac, Linux oraz platformach chmurowych.

IronPDF jest również dostępny w środowiskach .NET, Java, Python i Node.js.

Redakcja i podpisanie

Za pomocą IronPDF użytkownik może ustawiać właściwości, zwiększać bezpieczeństwo za pomocą haseł i uprawnień oraz stosować podpisy cyfrowe w plikach PDF.

Szablony stron i ustawienia

IronPDF pozwala dostosowywać dokumenty PDF za pomocą nagłówków, stopek, numerów stron i regulowanych marginesów. Obsługuje również responsywne układy i niestandardowe rozmiary papieru.

Zgodność z normami

Pakiet IronPDF jest również zgodny ze standardami PDF, takimi jak PDF/A i PDF/UA. Obsługuje kodowanie znaków UTF-8 oraz pliki takie jak obrazy, CSS i czcionki.

Generowanie dokumentów PDF przy użyciu modułów IronPDF i HashLib

Wymagania wstępne IronPDF

  1. IronPDF wykorzystuje .NET 6.0 jako technologię bazową. Dlatego upewnij się, że środowisko uruchomieniowe .NET 6.0 jest zainstalowane w Twoim systemie.
  2. Python 3.0+: Musisz mieć zainstalowaną wersję Pythona 3 lub nowszą.
  3. Pip: Zainstaluj instalator pakietów Python pip, aby zainstalować pakiet IronPDF.

Na początek utwórzmy plik w języku Python, aby dodać nasze skrypty. W tym przykładzie jako edytor kodu używamy Visual Studio Code.

Otwórz Visual Studio Code i utwórz plik hashlibDemo.py.

Zainstaluj bibliotekę IronPDF:

pip install ironpdf

Następnie dodaj poniższy kod, aby zademonstrować użycie pakietów IronPDF i Hashlib dla języka 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

Wyjaśnienie kodu

Podany kod pokazuje wykorzystanie różnych technik haszowania przy użyciu biblioteki hashlib w języku Python:

  1. Prosty przykład haszowania: Oblicza skrót SHA-256 określonego ciągu danych (b'IronPDF from Iron Software is Awesome').
  2. Hashing z różnymi rozmiarami skrótów: W tej sekcji pokazano hashing przy użyciu algorytmów MD5, SHA-256 i SHA-512 na dokładnie tym samym ciągu danych.
  3. Przykład haszowania z kluczem: W tym przykładzie wykorzystano funkcję skrótu blake2b z określonym kluczem (b'pseudorandom key') do wykonania haszowania z kluczem na danych.
  4. Przykład losowego haszowania: Wykorzystuje algorytm PBKDF2-HMAC z SHA-256 do generowania losowego skrótu z losowo wygenerowanym solą.
  5. Generowanie pliku PDF: Po zademonstrowaniu przykładów haszowania kod generuje dokument PDF przy użyciu IronPDF, który zawiera treść HTML prezentującą przykłady haszowania.

Każdy przykład ilustruje różne aspekty haszowania kryptograficznego, takie jak standardowe haszowanie, haszowanie z kluczem oraz techniki haszowania losowego.

Wynik

hashlib Python ((Jak to działa: przewodnik dla programistów)): Rysunek 2 — Przykładowy wynik konsoli

PDF

hashlib Python ((Jak to działa: przewodnik dla programistów)): Rysunek 3 — Przykładowy plik PDF wygenerowany przy użyciu IronPDF

Licencja IronPDF

hashlib Python ((Jak to działa: przewodnik dla programistów)): Rysunek 4 – Strona licencyjna IronPDF

IronPDF działa na licencji Python. IronPDF for Python oferuje bezplatną licencję probną, aby umożliwić użytkownikom przetestowanie jego rozbudowanych funkcji przed zakupem.

Umieść klucz licencyjny na początku skryptu przed użyciem pakietu IronPDF:

from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
PYTHON

Wnioski

Moduł hashlib jest niezbędnym elementem standardowej biblioteki języka Python, zapewniającym solidne i bezpieczne funkcje skrótu dla różnych zastosowań. Niezależnie od tego, czy chcesz zapewnić integralność danych, bezpiecznie przechowywać hasła, czy tworzyć podpisy cyfrowe, hashlib oferuje niezbędne narzędzia. Z drugiej strony IronPDF to potężna biblioteka do generowania i edycji plików PDF. Dzięki obu tym bibliotekom programiści mogą szybko generować skróty i zapisywać je w formacie PDF.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie