Il checksum MD5 è una sequenza di 32 caratteri esadecimali che rappresenta un’impronta digitale univoca del contenuto di un file. È usato comunemente per verificare l'integrità dei file, assicurandosi che non siano stati modificati. In Node.js, calcolare il checksum MD5 di un file è un’operazione semplice grazie al modulo built-in crypto. In questo articolo vedremo come calcolare l’hash MD5 di un file usando Node.js e il modulo crypto.
Per calcolare il checksum MD5, useremo il modulo crypto
(per generare l'hash) e il modulo fs
per leggere il file. Entrambi questi moduli sono già inclusi in Node.js, quindi non è necessario installare dipendenze aggiuntive.
Definiamo una funzione chiamata calculateMD5
che accetterà come parametro il percorso del file da processare. La funzione leggerà il contenuto del file e genererà il checksum MD5.
const crypto = require('crypto');
const fs = require('fs');
function calculateMD5(filePath) {
return new Promise((resolve, reject) => {
// Creiamo un'istanza di hash MD5
const hash = crypto.createHash('md5');
// Creiamo uno stream di lettura del file
const stream = fs.createReadStream(filePath);
// Aggiorniamo l'hash con i dati man mano che li leggiamo dallo stream
stream.on('data', (chunk) => {
hash.update(chunk);
});
// Quando lo stream è terminato, risolviamo la promise con l'hash finale
stream.on('end', () => {
const md5Checksum = hash.digest('hex');
resolve(md5Checksum);
});
// Gestiamo gli errori
stream.on('error', (err) => {
reject(err);
});
});
}
Questa funzione utilizza uno stream per leggere il file pezzo per pezzo e aggiorna progressivamente l’hash MD5. Quando la lettura è completa (stream.on('end')
), la funzione restituisce il checksum in formato esadecimale.
In dettaglio:
- Creazione dell’istanza di hash:
crypto.createHash('md5')
crea un oggetto hash MD5. - Lettura del file tramite stream:
fs.createReadStream(filePath)
legge il file senza caricare tutto in memoria, rendendo il processo più efficiente. - Calcolo dell’hash: ogni volta che riceviamo un chunk di dati dal file, aggiorniamo l’hash con
hash.update(chunk)
. - Finalizzazione dell’hash: quando la lettura è completata, chiamiamo
hash.digest('hex')
per ottenere il valore MD5 in formato esadecimale.
Conclusione
Questo metodo è efficiente anche per file di grandi dimensioni, poiché legge i dati in modo incrementale senza dover caricare l'intero file in memoria. Utilizzando questo approccio con Node.js, possiamo calcolare velocemente il checksum MD5 di un file per verificarne l'integrità.