Hash MD5 in Python

TJ Lerias 30 gennaio 2023
  1. Cos’è l’hashish?
  2. Cos’è MD5?
  3. Modulo hashlib Python
  4. Usa l’algoritmo MD5 in Python
Hash MD5 in Python

Questo articolo dimostrerà come usare l’hash MD5 usando il modulo Python hashlib.

Cos’è l’hashish?

Un hash è una funzione che prende dati di lunghezza variabile e li converte in una lunghezza fissa. Il valore restituito da una funzione hash è chiamato valore hash, codice hash o digest. I valori hash vengono solitamente utilizzati per indicizzare una tabella di dimensioni fisse denominata tabella hash.

Cos’è MD5?

L’algoritmo di digest dei messaggi MD5 è una popolare funzione hash che produce un valore hash a 128 bit. Inizialmente progettato come funzione di hash crittografico, ora è comunemente utilizzato per verificare l’integrità dei dati a causa di molteplici problemi di sicurezza e vulnerabilità.

Modulo hashlib Python

La libreria standard di Python consiste in un modulo che implementa molti diversi algoritmi di hash sicuro e message digest chiamati hashlib. Può anche includere algoritmi aggiuntivi disponibili a seconda della libreria OpenSSL che Python utilizza sulla tua piattaforma.

Per utilizzare gli algoritmi di hashing, importa il modulo hashlib.

import hashlib

Ora possiamo usare gli algoritmi di hashing supportati da questo modulo. Per controllare gli algoritmi hash disponibili nell’interprete Python in esecuzione, utilizzare l’attributo costante algorithms_available.

import hashlib

print(hashlib.algorithms_available)

Produzione:

{'md5', 'blake2s', 'sha256', 'sha384', 'sha3_512', 'blake2b', 'md4', 'md5-sha1', 'sha512_224', 'sha224', 'sha3_224', 'ripemd160', 'sha3_256', 'shake_256', 'sm3', 'shake_128', 'sha3_384', 'sha1', 'sha512_256', 'whirlpool', 'sha512'}

L’elenco sopra sono gli algoritmi disponibili in hashlib, inclusi gli algoritmi disponibili di OpenSSL

Per verificare gli algoritmi hash garantiti per essere supportati su tutte le piattaforme da questo modulo, utilizzare l’attributo costante algorithms_guaranteed.

import hashlib

print(hashlib.algorithms_guaranteed)

Produzione:

{'sha3_256', 'sha256', 'sha3_224', 'sha224', 'blake2s', 'sha3_512', 'shake_128', 'sha512', 'sha3_384', 'shake_256', 'md5', 'blake2b', 'sha384', 'sha1'}

Nota: md5 è nella lista di algorithms_guaranteed, ma alcuni fornitori upstream conformi a FIPS offrono una build Python che lo esclude.

Usa l’algoritmo MD5 in Python

Per utilizzare l’algoritmo md5, utilizzeremo il costruttore md5() e alimenteremo l’oggetto hash con oggetti simili a byte utilizzando il metodo update() o passeremo i dati come parametro del costruttore.

Per ottenere il valore hash, utilizzare il metodo digest(), che restituisce un digest dell’oggetto bytes dei dati inviati all’oggetto hash.

import hashlib

md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")

print(md5_hash.digest())

Produzione:

b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

Puoi anche passare i dati come parametro al costruttore e ottenere il valore hash

import hashlib

print(hashlib.md5(b"Hello World").digest())

Produzione:

b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

Simile al metodo digest(), puoi anche usare hexdigest(), che restituisce un oggetto stringa del digest contenente solo cifre esadecimali.

import hashlib

md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")

print(md5_hash.hexdigest())

Produzione:

b10a8db164e0754105b7a99be72e3fe5

Notare che c’è una b prima della stringa letterale passata al metodo update(). Viene utilizzato per creare un’istanza di tipo bytes anziché di tipo str. Poiché la funzione di hashing accetta solo una sequenza di byte come parametro. Il passaggio di oggetti stringa al metodo update() non è supportato.

Puoi anche eseguire più chiamate al metodo update(), che equivale a una singola chiamata con tutti gli argomenti concatenati.

import hashlib

first_hash = hashlib.md5()
first_hash.update(b"Hello World, Hello Python")
print(first_hash.hexdigest())

second_hash = hashlib.md5()
second_hash.update(b"Hello World,")
second_hash.update(b" Hello Python")
print(second_hash.hexdigest())

Produzione:

b0f2921c8c0e63898b0388777908893a
b0f2921c8c0e63898b0388777908893a

In sintesi, possiamo utilizzare l’algoritmo hash md5 tramite il modulo hashlib che può essere alimentato con i dati passandolo come parametro del costruttore md5() oppure utilizzando il metodo update(). Possiamo ottenere il valore hash utilizzando il metodo digest(), che restituisce un oggetto bytes del metodo digest() o hexdigest(), che restituisce un oggetto stringa del digest contenente solo cifre esadecimali.