http://play.golang.org/p/SKtaPFtnKO

func md(str string) []byte {
    h := md5.New()
    io.WriteString(h, str)

    fmt.Printf("%x", h.Sum(nil))
    //base 16, with lower-case letters for a-f
    return h.Sum(nil)
}

Todo lo que necesitas es un Hash de clave de cadena que se convierte a partir de una cadena de entrada. Yo era capaz de conseguir en bytes formato usting h.Suma(nil) y capaz de imprimir el Hash de clave en %x x formato. Pero quiero volver al %x x formato de esta función, así que puedo usar para convertir la dirección de correo electrónico para Hash de clave y utilizarlo para acceder a Gravatar.com.

¿Cómo obtengo %x x formato Hash de clave mediante md5 función en Ir?

Gracias,

InformationsquelleAutor | 2013-10-11

2 Comentarios

  1. 31

    Si he entendido correctamente desea devolver el %x x formato:

    puede importar hex y el uso de la EncodeToString método

    str := hex.EncodeToString(h.Sum(nil))

    o simplemente Sprintf el valor:

    func md(str string) string {
        h := md5.New()
        io.WriteString(h, str)
    
        return fmt.Sprintf("%x", h.Sum(nil))
    }

    nota que Sprintf es más lento debido a que es necesario analizar la cadena de formato y, a continuación, reflejan basado en el tipo que se encuentra

    http://play.golang.org/p/vsFariAvKo

    • hex.EncodeToString es, probablemente, un poco más eficiente (sin reflejos, etc).
    • Gracias. He actualizado la respuesta
    • hex.EncodeToString es aproximadamente 5 veces más rápido que fmt en mi benchmarking
    • Tal vez sea sólo yo, pero %x me dio vacío de salida y hex.EncodeToString tenido el resultado esperado.
  2. 15

    Debe evitar el uso de la fmt de este paquete. El fmt paquete utiliza la reflexión, y es caro para lo que la depuración. Usted sabe lo que tiene, y lo que usted desea convertir, por lo que debe ser el uso de la conversión adecuada paquete.

    Para la conversión de binario a hexadecimal, y el uso de la codificación/hex paquete.

    Hex string:

    str := hex.EncodeToString(h.Sum(nil))

    De Hex string:

    b, err := hex.DecodeString(str)

    También hay Codificar /Decodificar funciones para []byte.

    Cuando usted necesita para convertir a un decimal utilizar el strconv paquete.

    De int a string:

    str := strconv.Itoa(100)

    De string a int:

    num, err := strconv.Atoi(str)

    Hay varias otras funciones de este paquete que hacer otras conversiones (base, etc.).

    Así que a menos que estés en modo de depuración o el formato de un mensaje de error, el uso adecuado de las conversiones. Por favor.

Dejar respuesta

Please enter your comment!
Please enter your name here