Cómo canalizar el resultado hash md5 en shell


12

Estoy buscando una forma simple de canalizar el resultado de md5sumotro comando. Algo como esto:

$echo -n 'test' | md5sum | ...

Mi problema es que md5sumno solo genera el hash de la cadena, sino también una exageración, lo que indica que la entrada provino de stdin. Revisé el archivo man y no encontré ningún indicador para controlar la salida.


44
Nota: tenga cuidado de no usar echo -ncuando se desconocen los datos de texto. Usar en su printf '%s' "$DATA"lugar. A diferencia echo -n "$DATA", funcionará cuando DATA="-n"(entre otros ejemplos).
Stéphane Gimenez

Respuestas:


14

Puedes usar el comando cortar ; le permite cortar un cierto rango de caracteres / bytes de cada línea de entrada. Como el hash MD5 tiene una longitud fija (32 caracteres), puede usar la opción -c 1-32para mantener solo los primeros 32 caracteres de la línea de entrada:

echo -n test | md5sum | cut -c 1-32

Alternativamente, puede indicar cutdividir la línea en cada espacio y mostrar solo el primer campo: (tenga en cuenta las comillas alrededor del espacio)

echo -n test | md5sum | cut -d " " -f 1

Vea la página de manual de corte para más opciones.


¡Pensé en eso también! Elegí -d+ -fpara que md5sumpueda ser reemplazado con sha1sumo lo que sea más tarde.
Stéphane Gimenez

awktambién funciona: echo -n test | md5sum | awk -F" " '{print $1}' oawk -F" " '{print $1}' <(echo -n test | md5sum)
laebshade

Gracias por la respuesta. @laebshade En realidad, debe usar printf; de lo contrario, generará un nuevo carácter de línea al final;)
nmat

@laebshade: la -F" "opción para awkes muy extraña de ver, dado que es la opción predeterminada para awk.
enzotib

3

Puedes cuthacerlo:

echo -n 'test' | md5sum | cut -d' ' -f1

Aquí, -d' 'elige el espacio como delimitador y -f1solicita el primer campo (antes de un delimitador).


2

Usar awk también funciona bien:

echo -n 'test' | md5sum | awk '{print $1}'

Otra forma es hacer una subcadena. Como sabe que el hash md5 es una cadena con 32 caracteres, puede usar:

HASH=$(echo -n 'test' | md5sum -) && echo ${HASH:0:32}

Son solo manipulaciones de cuerdas, ¡así que tienes la opción!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.