Visão geral da biblioteca de criptografia do Python
Configure primitivas hazmat e de alto nível; compreenda a estrutura da biblioteca.
Visão geral da biblioteca de criptografia do Python é uma aula grátis de Cryptology Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cryptology Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cryptology Academy inclui 4 aulas no total.
Por que usar a biblioteca cryptography?
A biblioteca Python cryptography (da PyCA) fornece uma interface Fernet de alto nível e primitivas hazmat de baixo nível. Ela encapsula o OpenSSL e é o padrão da comunidade para criptografia de produção em Python.
Instalação e estrutura
Instale: pip install cryptography. Duas camadas: cryptography.fernet (criptografia simétrica segura e opinativa) e cryptography.hazmat.primitives (AES, RSA, EC, funções de hash, HMAC — use com cuidado).
Fernet: criptografia simétrica segura
Fernet usa AES-128-CBC + HMAC-SHA256 com um carimbo de data e hora. Ele gerencia automaticamente a geração do IV, o preenchimento e o MAC. É perfeito para criptografar valores de configuração, tokens ou pequenos blocos de dados.
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)Primitivas hazmat: funções de hash
A camada hazmat fornece SHA-2, SHA-3, BLAKE2 e muito mais:
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())Primitivas hazmat: HMAC
HMAC para autenticação de mensagens:
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 invalidSerialização de chaves
Serializar chaves em PEM/DER para armazenamento ou transmissão:
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])Carregamento de chaves a partir de PEM
Carregar uma chave PEM do disco:
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")Manipulação de certificados X.509
Analisar e inspecionar certificados 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)Geração de bytes aleatórios
Use sempre os.urandom ou secrets para obter aleatoriedade criptográfica:
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)Como evitar armadilhas da camada hazmat
A API hazmat é chamada de "Materiais Perigosos" por um motivo. Erros comuns: reutilizar nonces, usar o modo ECB, ignorar tags de autenticação e comparar MACs com ==. Use APIs de alto nível sempre que possível.
Verificação de conhecimento
O que a criptografia Fernet fornece que o AES-CBC bruto, por si só, não fornece?
Recapitulação da lição
A biblioteca cryptography tem duas camadas: Fernet, segura, e hazmat, flexível. Use Fernet para criptografia simétrica e hazmat para AES-GCM, RSA, ECDSA e manipulação de certificados. Use sempre os.urandom para as chaves. Evite as armadilhas da camada hazmat — prefira modos autenticados.
Perguntas Frequentes
A aula “Visão geral da biblioteca de criptografia do Python” é grátis?
Sim — o texto completo de “Visão geral da biblioteca de criptografia do Python” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cryptology Academy, atualize para CoddyKit PRO. O curso de Cryptology Academy inclui 4 aulas no total.
O que vou aprender em “Visão geral da biblioteca de criptografia do Python”?
Configure primitivas hazmat e de alto nível; compreenda a estrutura da biblioteca. Você pratica Cryptology Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Cryptology Academy?
Nenhuma experiência prévia é necessária. Cryptology Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Visão geral da biblioteca de criptografia do Python”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Cryptology Academy?
Sim. Cada aula de Cryptology Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Visão geral da biblioteca de criptografia do Python
- Encriptação e desencriptação AES-GCM em Python
- Pares de chaves RSA e ECDSA em Python
- Armadilhas comuns de criptografia em Python e padrões seguros