Pertanyaan ini sudah ada jawabannya di sini:
Saya mencoba untuk menghasilkan jumlah MD5 (menggunakan md5sum) dari sebuah string, "halo". Saya mencoba berbagai metode sebagai alat md5sum di Linux, fungsi MD5 () PHP, serta berbagai teks online ke penerjemah md5sum.
echo "hello" | md5sum
dan
echo "hello" > file && md5sum file
Berikan hasilnya b1946ac92492d2347c6235b4d2611184
. Namun, fungsi md5 () PHP dan hampir semua generator online memberikan output 5D41402ABC4B2A76B9719D911017C592
.
Apa alasannya?
Jawaban:
Secara default,
echo
sertakan karakter baris baru di akhir output. Namun, PHP dan situs online yang Anda gunakan tidak menyertakan baris baru. Untuk menekan karakter baris baru, gunakan-n
bendera:Keluaran:
Lihat:
help echo
atau dengan printf:
sumber
echo -n
dapat bergema-n
jika Linux mereka menggunakan Busybox yang dilucuti.Jawaban @ Cyrus tepat pada titik dengan cara mengatasi ini - untuk menjelaskan, ketika menggunakannya
echo
akan menghasilkan baris baru di akhir string. Seperti yang Anda lihat pada output online ini,hello
dengan baris baru persis MD5 yang Anda dapatkan sebelumnya. Menggunakan-n
menekan baris baru, dan kemudian akan memberi Anda hasil yang Anda harapkan.Edit :
Anda dapat melihatnya dengan jelas jika Anda output ke
hexdump
, yang menunjukkan heksadesimal dari byte di sana.Lihat
0a
(\n
) di akhir stringDengan
-n
gema tidak menempatkan baris baru (\n
) pada akhirnyaSekarang dengan string kosong
Hanya karakter Baris Baru
String kosong, jadi
hexdump
tidak menunjukkan outputsumber
echo hello
dan masingecho -n hello
-hexdump -C
masing;)echo -n
, karena tidak standar dan tidak konsisten didukung (lihat Single Unix Spec untukecho
dan katalog yang lebih rinci tentang ketidakcocokan oleh Sven Mascheck ). Jika Anda ingin bekerja secara konsisten, gunakanprintf
saja; itu sedikit lebih rumit untuk digunakan (Anda harus menentukan string format selain data yang ingin Anda cetak), tetapi IMO layak untuk menghindari masalah. Dalam hal ini,printf "%s" "hello"
akan melakukan trik.