¿Cómo obtener el hash MD5 de una cadena directamente en el terminal?

189

¿Cómo obtengo el hash MD5 de una cadena directamente desde el terminal?

Por ejemplo, quiero la cadena abcdefghash. Actualmente, el comando md5sum solo acepta un nombre de archivo como entrada. Simplemente quiero ingresar la siguiente línea y hacer todo.

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

¿Cómo puedo lograr eso?

Hamed Momeni
fuente
2
md5 -s abcdefg
Raitisd

Respuestas:

252

También puedes decir algo como esto:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

Básicamente hace lo mismo descrito por @enzotib, pero es quizás un poco más simple.

jfmessier
fuente
2
También desea actualizar el resultado del ejemplo, ya que 7803ffca ... es el resultado con la nueva línea agregada. El resultado correcto para el comando anterior es83218ac34c1834c26781fe4bde918ee4 -
Xanthir
19
¿Por qué hay espacios y un guión al final?
keune
1
Corríjame si me equivoco, pero creo que esto se debe a que la MD5sum se aplicó a una secuencia de datos, en lugar de leer el contenido de un archivo, que tiene un nombre asociado.
jfmessier
11
Tenga en cuenta que el -nes obligatorio. Sin él, tu hash estará totalmente equivocado ya que incluye el carácter de nueva línea.
Pithikos
1
¿Cómo podría ignorar -al final? @jfmessier
Alper
61

Muy simple, acepta stdin, así que

md5sum <<<"my string"

Para evitar la nueva línea final agregada por el shell:

printf '%s' "my string" | md5sum
enzotib
fuente
Dándole a @messier y @enzotib un voto; ambos entran en mi preciada categoría de "simplicidad elegante". Sería apto para usar la <<<"tubería en un script; echo stringgana para la línea de comando. Bien hecho.
Tom
3
+1 por usar printfcorrectamente. Si quieres tener la suma sin el -, pon | cut -d ' ' -f 1. Ejemplo de uso:sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)
Lekensteyn
1
¡Es extraño, pero el <<<operador y la printffunción están dando resultados completamente diferentes para md5 hash! ¡Sin embargo, el resultado de printf es correcto!
Hamed Momeni
¡parece que el uso del <<<operador envía una nueva línea al md5sum!
Hamed Momeni
1
Sí, como dije entre el primer y el segundo ejemplo
enzotib
27
$ echo -n 123456 | md5sum | awk '{print $1}'
e10adc3949ba59abbe56e057f20f883e

Puedes crear un script de shell.

Por ejemplo, el nombre del script es md5.sh:

#!/bin/bash

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

permiso de ejecución:

 chmod +x md5.sh

Entonces:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e

Si su sistema es macOS. Necesita modificar este script:

$ echo -n 123456 | md5 | awk '{print $1}' 
e10adc3949ba59abbe56e057f20f883e
ty4z2008
fuente
1
Esto es demasiado largo.
Gucho Ca
1
alternativa a awk:cut -d ' ' -f 1
phil294
md5() { echo -n $1 | md5sum | awk '{print $1}'; }Creé una función en .bashrc y luego puedo usarla $ md5 testen la línea de comando. gracias por la respuesta
Ruben Benjamin
awkComando más corto :'$0=$1'
Alex Stragies
@AlexStragies sí
ty4z2008
10

Ejecutar md5sum sin ningún argumento hará que lea la entrada del terminal. Escriba o pegue lo que quiera, y cuando haya terminado, presione ctrl-dpara finalizar la entrada.

psusi
fuente
1
Sí, también tienes razón. pero ctrl+ddebe presionarse dos veces para que funcione.
Hamed Momeni
@ James, si no sigue una nueva línea, sí. Si lo golpeas después de presionar enter, solo necesita una vez. Cuando no sigue una nueva línea, simplemente obliga a que todos los caracteres escritos en la línea se procesen inmediatamente en lugar de esperar una nueva línea.
psusi
10
openssl md5 filename
openssl sha1 filename

Para canalizar el contenido utilizando echo

echo -n 123456 | openssl md5
huésped
fuente
4

Mi rápido golpe en el --helppara md5sumdemuestra que el comando:

md5sum -

luego dará un aviso para una entrada simple. Ingresar algo de texto y luego usar Entery luego Ctrl+ Dpara indicar el final del archivo hace md5sumque escupe el MD5 del texto sin formato que ingresó (incluido eso Enter, es un CR, IIRC).

Menos para escribir y sin tuberías! ¡Y evitando que su contraseña de texto plano se registre en el historial de shell! ¡Cortejar!

Si no desea ese CR final (que suele ser el caso si desea cifrar una contraseña), no presione Enterantes Ctrl+ D, ingrese Ctrl+ Ddos veces.

Será
fuente
2

En mis scripts descubrí que hay dos cosas que debes saber sobre este problema.

  • No importa si lo hace echo "$myvariable"o no, echo -n "$myvariable" pero siempre debe usar las dobles claves para las cadenas y siempre usar el mismo método. si no, las cosas no coincidirán.
  • en la salida siempre obtienes un espacio final y un guión como se muestra en el ejemplo:

    $ echo -n Welcome | md5sum
    7803ffcaea43bb81a439fde13b29bc35  -
    

para deshacerte de eso y quedarte solo con el código 7803ffcaea43bb81a439fde13b29bc35, haz lo siguiente:echo "$myvariable" | md5sum | cut -d" " -f1

Bodo Hugo Barwich
fuente
No olvide el -nparámetro aquí para evitar generar la nueva línea final, lo que llevaría a un md5 incorrecto:echo -n $myvariable | md5sum | cut -d" " -f1
derFunk
1

Hay muchos ejemplos para hacer esto, pero algunos de ellos no son equivalentes porque algunos incluyen explícita o implícitamente la nueva línea, y otros no.

Me gustaría especificar claramente cuáles de los métodos populares incluyen la nueva línea y cuáles no.

Estos son algunos ejemplos junto con el cálculo del hash md5 SIN nueva línea final (CORRECTO):

Usando un archivo con texto:

$ echo -n "test" > test.txt
$ wc test.txt
0 1 4 test.txt
$ md5sum test.txt
098f6bcd4621d373cade4e832627b4f6  test.txt

Nota: -n en echosignifica: "no muestre la nueva línea final".

Utilizando echocon en -nlínea:

$ echo -n "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -

Utilizando printf:

$ printf "%s" "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -

Usando solo el md5sumcomando:

(Escribamos md5sum, presione Enterluego escriba cadena testy luego presione combinación doble Ctrl+ d)

$ md5sum
test098f6bcd4621d373cade4e832627b4f6  -

Usando el md5sum -comando:

(Escribamos md5sum -, presione Enterluego escriba cadena testy luego presione combinación doble Ctrl+ d)

$ md5sum -
test098f6bcd4621d373cade4e832627b4f6  -

Aquí hay algunos ejemplos junto con el cálculo del hash md5 CON la nueva línea final (SO NOT CORRECT):

Usando un archivo con texto:

$ echo "test" > test_n.txt
$ wc test_n.txt
1 1 5 test_n.txt
$ md5sum test_n.txt
d8e8fca2dc0f896fd7cb4cb0031ba249  test_n.txt

Usando echoSIN en -nlínea:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Usando aquí cadenas :

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Usando solo el md5sumcomando pero con la Entertecla después de escribir el texto:

(Escribamos md5sum, presione Enterluego escriba cadena testy luego presione agaien Entery una vez combinación Ctrl+ d)

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Usando el md5sum -comando pero con la Entertecla después de escribir el texto:

(Escribamos md5sum -, presione Enterluego escriba cadena testy luego presione agaien Entery una vez combinación Ctrl+ d)

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
simhumileco
fuente