Ce face crypto/md5.Sum
md5.Sum(date) returnează amprenta MD5 a datelor, un tablou de 16 octeți, afișat de obicei cu %x (32 de caractere). MD5 este încă folosit pentru compatibilitate: sume de control pentru fișiere, antetul ETag, chei de cache, unele API-uri vechi și Gravatar.
MD5 este spart criptografic: se pot construi ușor două fișiere diferite cu aceeași sumă. Nu îl folosi pentru parole, semnături sau verificarea fișierelor descărcate din surse în care nu ai încredere; folosește SHA-256. Pentru date citite în flux există md5.New(), la fel ca la sha256.New.
Parametri
| Parametru | Descriere |
|---|---|
data |
Datele de rezumat. |
Ce returnează
Un tablou [16]byte.
Exemple
Exemplul 1: Sume MD5
package main
import (
"crypto/md5"
"fmt"
)
func main() {
for _, t := range []string{"", "dexblog", "Dexblog"} {
fmt.Printf("%x %q\n", md5.Sum([]byte(t)), t)
}
}
Rezultat
d41d8cd98f00b204e9800998ecf8427e ""
eef1771a1990919bae19d3cba1128be6 "dexblog"
06f4985dcc100256177483c7688a1519 "Dexblog"
Exemplul 2: ETag pentru un răspuns HTTP
Browserul trimite înapoi ETag-ul în If-None-Match; dacă pagina nu s-a schimbat, răspundem cu 304, fără corp.
package main
import (
"crypto/md5"
"fmt"
"net/http"
"net/http/httptest"
)
var pagina = []byte("<h1>Prețuri actualizate la 19.10.2026</h1>")
func handler(w http.ResponseWriter, r *http.Request) {
etag := fmt.Sprintf(`"%x"`, md5.Sum(pagina))
w.Header().Set("ETag", etag)
if r.Header.Get("If-None-Match") == etag {
w.WriteHeader(http.StatusNotModified)
return
}
w.Write(pagina)
}
func main() {
rec := httptest.NewRecorder()
handler(rec, httptest.NewRequest("GET", "/preturi", nil))
etag := rec.Header().Get("ETag")
fmt.Println("Prima cerere:", rec.Code, "ETag:", etag, "corp:", rec.Body.Len(), "octeți")
req := httptest.NewRequest("GET", "/preturi", nil)
req.Header.Set("If-None-Match", etag)
rec = httptest.NewRecorder()
handler(rec, req)
fmt.Println("A doua cerere:", rec.Code, "corp:", rec.Body.Len(), "octeți")
}
Rezultat
Prima cerere: 200 ETag: "e476e760e06231d11a6dcff687e3ea6f" corp: 43 octeți
A doua cerere: 304 corp: 0 octeți
Greșeli frecvente
- Folosești MD5 pentru parole sau tokenuri: este rapid și spart. Folosește bcrypt/Argon2 pentru parole și
crypto/randpentru tokenuri.
Comenzi înrudite
crypto/sha256.Sum256: Calculează amprenta SHA-256 a unor date: 32 de octeți (64 de cifre hex) care se schimbă complet la orice modificare.crypto/sha256.New: Creează un calculator SHA-256 în care scrii datele pe bucăți (ex. cu io.Copy dintr-un fișier), apoi citești suma cu Sum(nil).encoding/hex.EncodeToString: Scrie octeții în hexazecimal (două cifre 0-9a-f pe octet) și înapoi; forma obișnuită pentru hash-uri și chei.