Calcolare il checksum MD5 di un file in Go

L’algoritmo di hashing MD5 è comunemente utilizzato per verificare l'integrità di un file, permettendo di generare un "fingerprint" univoco per i dati contenuti al suo interno. In Go, calcolare il checksum MD5 di un file è piuttosto semplice grazie ai pacchetti della libreria standard. In questo articolo vedremo come leggere un file e calcolare il suo hash MD5.

Per calcolare il checksum MD5 di un file, utilizzeremo i pacchetti crypto/md5 per l'algoritmo di hashing e io per la gestione della lettura del file.


package main

import (
	"crypto/md5"
	"encoding/hex"
	"fmt"
	"io"
	"os"
)

// Funzione per calcolare il checksum MD5 di un file
func calculateMD5(filePath string) (string, error) {
	// Aprire il file
	file, err := os.Open(filePath)
	if err != nil {
		return "", fmt.Errorf("errore nell'aprire il file: %w", err)
	}
	defer file.Close()

	// Creare un nuovo hash MD5
	hash := md5.New()

	// Copiare il contenuto del file nell'hash
	if _, err := io.Copy(hash, file); err != nil {
		return "", fmt.Errorf("errore nel calcolo dell'hash MD5: %w", err)
	}

	// Calcolare il checksum in formato esadecimale
	checksum := hex.EncodeToString(hash.Sum(nil))
	return checksum, nil
}

func main() {
	// Specificare il percorso del file di cui calcolare il checksum
	filePath := "testfile.txt"

	// Calcolare e stampare il checksum MD5
	checksum, err := calculateMD5(filePath)
	if err != nil {
		fmt.Println("Errore:", err)
		return
	}

	fmt.Printf("Il checksum MD5 del file %s è: %s\n", filePath, checksum)
}

Spiegazione:

  1. Aprire il file: La funzione calculateMD5 accetta il percorso del file come parametro e lo apre utilizzando os.Open(). In caso di errore, restituisce un errore formattato.

  2. Creare un hash MD5: Utilizziamo md5.New() per creare una nuova istanza di hash MD5.

  3. Leggere il file e aggiornare l'hash: Il contenuto del file viene letto e passato all'hash tramite io.Copy(), che copia i dati direttamente nel buffer dell'hash.

  4. Generare il checksum esadecimale: Una volta popolato l'hash, utilizziamo hash.Sum(nil) per ottenere il valore hash grezzo, quindi hex.EncodeToString() per convertirlo in una stringa esadecimale leggibile.

  5. Restituire il checksum: La funzione restituisce il checksum MD5 come stringa esadecimale.

Conclusione

Il checksum MD5 può essere utile per confrontare rapidamente se due file sono identici o se un file è stato alterato. Sebbene non sia più utilizzato per scopi crittografici, resta comunque un metodo rapido e semplice per verificare l'integrità dei file. Con Go, questo processo è estremamente semplice grazie alla sua libreria standard e alla possibilità di gestire facilmente i file e gli algoritmi di hashing.

Torna su