Python - Hash

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

TODO

-How to Encrypt and Decrypt Files in Python