Przegląd biblioteki cryptography dla języka Python
Skonfigurować prymitywy hazmat i wysokiego poziomu oraz zrozumieć strukturę biblioteki
Przegląd biblioteki cryptography dla języka Python to bezpłatna lekcja Cryptology Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cryptology Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Dlaczego warto używać biblioteki cryptography?
Biblioteka Python cryptography (rozwijana przez PyCA) udostępnia zarówno wysokopoziomowy interfejs Fernet, jak i niskopoziomowe prymitywy hazmat. Opakowuje OpenSSL i jest standardem społeczności w zakresie produkcyjnej kryptografii w Pythonie.
Instalacja i struktura
Zainstaluj za pomocą: pip install cryptography. Dwie warstwy: cryptography.fernet (bezpieczne, oparte na określonych założeniach szyfrowanie symetryczne) oraz cryptography.hazmat.primitives (AES, RSA, EC, funkcje skrótu, HMAC — używaj ostrożnie).
Fernet: bezpieczne szyfrowanie symetryczne
Fernet używa AES-128-CBC + HMAC-SHA256 ze znacznikiem czasu. Automatycznie obsługuje generowanie IV, dopełnianie i MAC. Doskonale nadaje się do szyfrowania wartości konfiguracyjnych, tokenów lub niewielkich danych binarnych.
from cryptography.fernet import Fernet
# Generate a URL-safe base64-encoded 32-byte key
key = Fernet.generate_key()
f = Fernet(key)
token = f.encrypt(b"my secret data")
print("Encrypted:", token[:40], "...")
plain = f.decrypt(token)
print("Decrypted:", plain)Prymitywy hazmat: funkcje skrótu
Warstwa hazmat udostępnia SHA-2, SHA-3, BLAKE2 i inne funkcje skrótu:
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend
digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
digest.update(b"Hello, ")
digest.update(b"world!")
result = digest.finalize()
print("SHA-256:", result.hex())Prymitywy hazmat: HMAC
HMAC do uwierzytelniania wiadomości:
from cryptography.hazmat.primitives import hmac, hashes
import os
key = os.urandom(32)
h = hmac.HMAC(key, hashes.SHA256())
h.update(b"authenticated message")
signature = h.finalize()
print("HMAC-SHA256:", signature.hex())
# Verify
h2 = hmac.HMAC(key, hashes.SHA256())
h2.update(b"authenticated message")
h2.verify(signature) # raises if invalidSerializacja kluczy
Serializuj klucze do formatów PEM/DER na potrzeby przechowywania lub przesyłania:
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.BestAvailableEncryption(b"passphrase")
)
print(pem[:60])Wczytywanie kluczy z PEM
Wczytaj klucz PEM z dysku:
from cryptography.hazmat.primitives.serialization import load_pem_private_key
with open("private_key.pem", "rb") as f:
pem_data = f.read()
key = load_pem_private_key(pem_data, password=b"passphrase")
print("Key loaded, size:", key.key_size, "bits")Obsługa certyfikatów X.509
Analizuj i sprawdzaj certyfikaty TLS:
from cryptography import x509
import datetime
with open("cert.pem", "rb") as f:
cert = x509.load_pem_x509_certificate(f.read())
print("Subject:", cert.subject)
print("Issuer:", cert.issuer)
print("Not valid after:", cert.not_valid_after_utc)
print("Serial:", cert.serial_number)Generowanie losowych bajtów
Do generowania kryptograficznie losowych wartości zawsze używaj os.urandom lub secrets:
import os, secrets
# Cryptographically secure 32-byte key
key = os.urandom(32)
print("Random key:", key.hex())
# secrets module: URL-safe token
token = secrets.token_urlsafe(32)
print("URL-safe token:", token)Unikanie pułapek warstwy hazmat
Interfejs hazmat nazywa się „Hazardous Materials” nie bez powodu. Typowe błędy to ponowne używanie nonce, używanie trybu ECB, pomijanie znaczników uwierzytelniania oraz porównywanie MAC za pomocą ==. Jeśli to możliwe, używaj interfejsów wysokopoziomowych.
Sprawdzenie wiedzy
Co zapewnia szyfrowanie Fernet, czego nie zapewnia samo szyfrowanie AES-CBC?
Podsumowanie lekcji
Biblioteka cryptography ma dwie warstwy: bezpieczną warstwę Fernet i elastyczną warstwę hazmat. Używaj Fernet do szyfrowania symetrycznego, a hazmat do AES-GCM, RSA, ECDSA i obsługi certyfikatów. Do kluczy zawsze używaj os.urandom. Unikaj pułapek warstwy hazmat — preferuj tryby uwierzytelniane.
Często zadawane pytania
Czy lekcja „Przegląd biblioteki cryptography dla języka Python” jest bezpłatna?
Tak — pełny tekst „Przegląd biblioteki cryptography dla języka Python” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cryptology Academy, przejdź na CoddyKit PRO. Kurs Cryptology Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Przegląd biblioteki cryptography dla języka Python”?
Skonfigurować prymitywy hazmat i wysokiego poziomu oraz zrozumieć strukturę biblioteki Ćwiczysz Cryptology Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Cryptology Academy?
Nie wymagamy żadnego doświadczenia. Cryptology Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Przegląd biblioteki cryptography dla języka Python”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Cryptology Academy?
Tak. Każda lekcja Cryptology Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Przegląd biblioteki cryptography dla języka Python
- Szyfrowanie i odszyfrowywanie AES-GCM w Pythonie
- Pary kluczy RSA i ECDSA w Pythonie
- Typowe pułapki kryptograficzne w Pythonie i bezpieczne wzorce