Esta pregunta ya tiene una respuesta aquí:
Traté de generar la suma MD5 (usando md5sum) de una cadena, "hola". Probé diferentes métodos como la herramienta md5sum en Linux, la función MD5 () de PHP, así como varios traductores en línea de texto a md5sum.
echo "hello" | md5sum
y
echo "hello" > file && md5sum file
Dio el resultado b1946ac92492d2347c6235b4d2611184
. Sin embargo, la función md5 () de PHP y casi todos los generadores en línea dieron la salida 5D41402ABC4B2A76B9719D911017C592
.
¿Cual es la razon?
Respuestas:
Por defecto,
echo
incluye un carácter de nueva línea al final de la salida. Sin embargo, PHP y los sitios en línea que usó no incluyen la nueva línea. Para suprimir el carácter de nueva línea, use la-n
bandera:Salida:
Ver:
help echo
o con printf:
fuente
echo -n
podría hacer eco-n
si su Linux está usando un Busybox despojado.La respuesta de @ Cyrus está exactamente en el punto de cómo resolver esto: para explicar, cuando se usa
echo
, generará una nueva línea al final de la cadena. Como puede ver en esta salida en línea,hello
con una nueva línea sale exactamente el MD5 que estaba obteniendo anteriormente. El uso-n
suprime la nueva línea y luego le dará el resultado que esperaba.Editar :
Puede verlo claramente si lo envía a
hexdump
, lo que muestra el hexadecimal de los bytes allí.Ver el
0a
(\n
) al final de la cadenaCon
-n
echo no pone una nueva línea (\n
) al finalAhora con una cuerda vacía
Solo el personaje New Line
Cadena vacía, por lo que
hexdump
no muestra salidafuente
echo hello
yecho -n hello
parahexdump -C
, respectivamente;)echo -n
, ya que es no estándar y apoyado inconsistente (véase el Unix Spec único paraecho
y un catálogo más detallado de incompatibilidades de Sven Mascheck ). Si desea que funcione de manera consistente, useprintf
en su lugar; es un poco más complejo de usar (debe especificar una cadena de formato además de los datos que desea imprimir), pero la OMI vale la pena para evitar problemas. En este caso,printf "%s" "hello"
hará el truco.