Introducció
Farem servir el mòdul integrat hashlib per utilitzar diferents algorismes de hash a Python.
Comencem:
uv init hash
Ús
Hi ha un mètode constructor amb nom per a cada tipus de hash.
Tots retornen un objecte hash amb la mateixa interfície senzilla.
Per exemple, utilitza sha256()
per crear un objecte de hash SHA-256. Ara pots alimentar aquest objecte amb valors de tipus bytes (normalment bytes) fent servir el mètode update
.
En qualsevol moment li pots demanar el resum (digest) de la concatenació de les dades que li hagis passat fins ara amb els mètodes digest()
o hexdigest()
.
import hashlib
m = hashlib.sha256()
m.update(b"El ")
m.update(b"Gattopardo")
print(m.digest())
print(m.hexdigest())
Per permetre el multithreading, el GIL de Python s’allibera mentre es calcula un hash al qual se li passen més de 2047 bytes de dades d’una sola vegada en el constructor o en el mètode .update
.
El resultat és:
b'\x13\xdc\x9c3\xedc\xbe\x86\xd3\x9f\x99\xd8\xac\x1d\xb9=\xf6"\x13\x80\xbf\\K\x923\x8a\x8ee\xb6\x86BL'
13dc9c33ed63be86d39f99d8ac1db93df6221380bf5c4b92338a8e65b686424c
És el mateix resultat que tenim amb OpenSSL:
echo -n "El Gattopardo" | openssl dgst -sha256
SHA2-256(stdin)= 13dc9c33ed63be86d39f99d8ac1db93df6221380bf5c4b92338a8e65b686424c
Més compacte:
print(hashlib.sha256(b"El Gattopardo").hexdigest())
Més informació a: Usage
Hash de fitxers
El mòdul hashlib proporciona una funció auxiliar per al càlcul eficient del hash d’un fitxer o d’un objecte tipus fitxer.
import hashlib
with open("moby-dick.txt", "rb") as f:
digest = hashlib.file_digest(f, "sha256")
digest.hexdigest()
Més informació a: File hashing