Go con Ejemplos: Huellas digitales tipo SHA1

Las huellas digitales tipo SHA-1 (en lo sucesivo, hashes SHA-1), son usadas frecuentemente para calcular pequeños identificadores para objetos binarios o de texto. Por ejemplo, el sistema de control de versiones Git usa SHA-1s para identificar archivos y directorios versionados. He aquí cómo calcular hashes SHA-1 en Go.

package main

Go implementa diferentes funciones hash en varios paquetes ubicados en crypto/*; para ver la lista completa de funciones hash disponibles haga click aquí.

import "crypto/sha1"
import "fmt"
func main() {
    c := "esta es una cadena de texto"

Los pasos para generar un hash son sha1.New(), sha1.Write(bytes) y, por último, sha1.Sum([]byte{}). Iniciamos creando un nuevo hash.

    h := sha1.New()

Write espera bytes como argumento. Si tienes una cadena de texto c, usa []byte(c) para forzar la conversión a bytes.

    h.Write([]byte(c))

Sum regresa el hash generado como un slice de bytes El argumento de Sum puede ser usado para agregar el resultado a un slice de bytes existente; normalmente no es utilizado. El nombre de la función Sum viene de checksum (suma de verificación) también conocido como hash sum.

    sb := h.Sum(nil)

Los valores SHA1 frecuentemente se imprimen en sistema hexadecimal, por ejemplo, en commits de git. Usa %x para convertir un hash a una cadena en hexadecimal.

    fmt.Println(c)
    fmt.Printf("%x\n", sb)
}

Este programa calcula un hash y lo imprime en formato hexadecimal legible para los humanos.

$ go run huellas-digitales-tipo-sha1.go
esta es una cadena de texto
110518500fa165c1859df82d3e32c8a127f93c1f

Puedes calcular otros tipos de hashes siguiendo pasos similares a los descritos arriba. Por ejemplo, para calcular hashes MD5: import crypto/md5 y después md5.New().

Si necesitas hashes criptográficamente seguros debes investigar cuidadosamente sobre nivel de fortaleza de un hash!

Siguiente ejemplo: Codificación Base64.