the san prices orlando job house for diego application hash go

san - hash house a go go prices



Generar el hash SHA de una cadena usando golang (6)

Aquí hay algunos buenos ejemplos:

El segundo ejemplo se dirige a sha256, para hacer sha1 hexadecimal harías:

// Calculate the hexadecimal HMAC SHA1 of requestDate using sKey key := []byte(c.SKey) h := hmac.New(sha1.New, key) h.Write([]byte(requestDate)) hmacString := hex.EncodeToString(h.Sum(nil))

(de https://github.com/soniah/dnsmadeeasy )

¿Puede alguien mostrarme un ejemplo práctico de cómo generar un hash SHA de una cadena que tengo, digamos myPassword := "beautiful" , usando Go 1?

Las páginas de documentos carecen de ejemplos y no pude encontrar ningún código que funcione en Google.


Aquí hay una función que podría usar para generar un hash SHA1:

// SHA1 hashes using sha1 algorithm func SHA1(text string) string { algorithm := sha1.New() algorithm.Write([]byte(text)) return hex.EncodeToString(algorithm.Sum(nil)) }

Reuní un grupo de esas funciones hash de utilidad aquí: https://github.com/shomali11/util

Encontrará FNV32 , FNV32a , FNV64 , FNV65a , MD5 , SHA1 , SHA256 y SHA512


De hecho, puedes hacer esto de una manera mucho más concisa e idiomática:

// Assuming ''r'' is set to some inbound net/http request form_value := []byte(r.PostFormValue("login_password")) sha1_hash := fmt.Sprintf("%x", sha1.Sum(form_value)) // Then output optionally, to test fmt.Println(sha1_hash)

En este ejemplo trivial de una POST http.Request contiene un campo login_password, vale la pena señalar que fmt.Sprintf() llamado con %x convirtió el valor hash en hexadecimal sin tener que incluir una declaración de import "encoding/hex" .

(Utilizamos fmt.Sprintf() en lugar de fmt.Printf() ya que estábamos enviando una cadena a una asignación de variable, no a una interfaz io.Writer ).

También de referencia, es que la función sha1.Sum() ejemplifica con mucha precisión de la misma manera que la definición sha1.New() :

func New() hash.Hash { d := new(digest) d.Reset() return d } func Sum(data []byte) [Size]byte { var d digest d.Reset() d.Write(data) return d.checkSum() }

Esto es cierto (al menos en el momento de la publicación) para las variantes de la biblioteca Sha en el conjunto de cifrado estándar de Golang, como Sha512 .

Por último, si uno quisiera, podrían seguir la implementación de [to] String () de func (h hash.Hash) String() string {...} con algo como func (h hash.Hash) String() string {...} para encapsular el proceso.

Eso es más probable más allá del alcance deseado de la pregunta original.


La documentación del paquete en http://golang.org/pkg/crypto/sha1/ tiene un ejemplo que demuestra esto. Se indica como un ejemplo de la función Nueva, pero es el único ejemplo en la página y tiene un enlace justo cerca de la parte superior de la página, por lo que vale la pena mirarlo. El ejemplo completo es

Código:

h := sha1.New() io.WriteString(h, "His money is twice tainted: ''taint yours and ''taint mine.") fmt.Printf("% x", h.Sum(nil))

Salida:

59 7f 6a 54 00 10 f9 4c 15 d7 18 06 a9 9a 2c 87 10 e7 47 bd


Un ejemplo :

import ( "crypto/sha1" "encoding/base64" ) func (ms *MapServer) storee(bv []byte) { hasher := sha1.New() hasher.Write(bv) sha := base64.URLEncoding.EncodeToString(hasher.Sum(nil)) ... }

En este ejemplo, hago un sha de una matriz de bytes. Puedes obtener la matriz de bytes usando

bv := []byte(myPassword)

Por supuesto, no necesita codificarlo en base64 si no es necesario: puede usar la matriz de bytes sin procesar devuelta por la función Suma.

Parece haber algo de confusión en los comentarios a continuación. Así que aclaremos para los próximos usuarios las mejores prácticas en conversiones a cadenas:

  • nunca almacena un SHA como una cadena en una base de datos, sino como bytes sin procesar
  • cuando desea mostrar un SHA a un usuario, una forma común es Hexadecimal
  • cuando desea una representación de cadena porque debe caber en una URL o en un nombre de archivo, la solución habitual es Base64 , que es más compacto

Ir por ejemplo tiene una página en hash sha1.

package main import ( "fmt" "crypto/sha1" "encoding/hex" ) func main() { s := "sha1 this string" h := sha1.New() h.Write([]byte(s)) sha1_hash := hex.EncodeToString(h.Sum(nil)) fmt.Println(s, sha1_hash) }

Puede ejecutar este ejemplo en play.golang.org