Bagaimana cara mendapatkan hash MD5 dari string langsung di terminal?

189

Bagaimana cara mendapatkan hash string MD5 langsung dari terminal?

Sebagai contoh, saya ingin string di- abcdefghash. Saat ini perintah md5sum hanya menerima nama file sebagai input. Saya hanya ingin memasukkan baris berikut dan semuanya dilakukan.

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

Bagaimana saya bisa mencapainya?

Hamed Momeni
sumber
2
md5 -s abcdefg
raitisd

Jawaban:

252

Anda juga dapat mengatakan sesuatu seperti ini:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

Ini pada dasarnya melakukan hal yang sama seperti yang dijelaskan oleh @enzotib, tetapi mungkin sedikit lebih sederhana.

jfmessier
sumber
2
Anda juga ingin memperbarui hasil contoh, karena 7803ffca ... adalah hasil dengan baris baru yang ditambahkan. Hasil yang benar untuk perintah di atas adalah83218ac34c1834c26781fe4bde918ee4 -
Xanthir
19
mengapa ada spasi dan tanda hubung di akhir?
keune
1
Harap perbaiki saya jika saya salah, tetapi saya pikir ini karena MD5sum diterapkan pada aliran data, sebagai lawan dari membaca konten file, yang memiliki nama yang terkait dengannya.
jfmessier
11
Perhatikan bahwa -nini wajib. Tanpanya, hash Anda akan sepenuhnya salah karena menyertakan karakter baris baru.
Pithikos
1
Bagaimana saya bisa mengabaikan -pada akhirnya. @jfmessier
alper
61

Sangat sederhana, ia menerima stdin, jadi

md5sum <<<"my string"

Untuk menghindari baris baru yang ditambahkan oleh shell:

printf '%s' "my string" | md5sum
enzotib
sumber
Memberi @ messier dan @enzotib suara; keduanya termasuk dalam kategori "kesederhanaan elegan" saya yang berharga. Saya akan cenderung menggunakan <<<"pipa dalam skrip; echo stringmenang untuk commandline. Sudah selesai dilakukan dengan baik.
Tom
3
+1 untuk digunakan printfdengan benar. Jika Anda ingin memiliki jumlah tanpa -, masukkan | cut -d ' ' -f 1. Contoh penggunaan:sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)
Lekensteyn
1
itu aneh tapi <<<operator dan printffungsinya memberikan hasil yang sama sekali berbeda untuk hash md5! hasil printf sudah benar!
Hamed Momeni
sepertinya menggunakan <<<operator mengirimkan baris baru ke md5sum!
Hamed Momeni
1
Ya, benar, seperti yang saya katakan di antara contoh pertama dan kedua
enzotib
27
$ echo -n 123456 | md5sum | awk '{print $1}'
e10adc3949ba59abbe56e057f20f883e

Anda dapat membuat skrip shell.

Misalnya, nama skrip adalah md5.sh:

#!/bin/bash

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

mengeksekusi izin:

 chmod +x md5.sh

Kemudian:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e

Jika sistem Anda macOS. Anda perlu memodifikasi skrip ini:

$ echo -n 123456 | md5 | awk '{print $1}' 
e10adc3949ba59abbe56e057f20f883e
ty4z2008
sumber
1
Ini terlalu lama.
Gucho Ca
1
alternatif untuk awk:cut -d ' ' -f 1
phil294
Saya membuat fungsi md5() { echo -n $1 | md5sum | awk '{print $1}'; }dalam .bashrc dan kemudian saya bisa gunakan $ md5 testdi baris perintah. terima kasih atas jawabannya
Ruben Benjamin
awkPerintah lebih pendek :'$0=$1'
Alex Stragies
@AlexStragies yep
ty4z2008
10

Menjalankan md5sum tanpa argumen sama sekali akan menyebabkannya membaca input dari terminal. Ketik atau rekatkan apa pun yang Anda inginkan, dan setelah selesai, tekan ctrl-duntuk mengakhiri input.

psusi
sumber
1
ya, kamu benar juga. tetapi ctrl+dperlu ditekan dua kali agar bisa bekerja.
Hamed Momeni
@ James, jika tidak mengikuti baris baru, ya. Jika Anda menekannya setelah menekan enter, itu hanya perlu satu kali. Ketika tidak mengikuti baris baru, itu hanya memaksa semua karakter yang diketik di baris sejauh ini untuk segera diproses alih-alih menunggu baris baru.
psusi
10
openssl md5 filename
openssl sha1 filename

Untuk string pipe konten menggunakan echo

echo -n 123456 | openssl md5
tamu
sumber
4

Poke cepat saya di --helpuntuk md5summenunjukkan bahwa perintah:

md5sum -

kemudian akan memberikan prompt untuk input sederhana. Memasukkan beberapa teks dan kemudian menggunakan Enterdan kemudian Ctrl+ Duntuk menandakan akhir file kemudian menyebabkan md5sumuntuk memuntahkan MD5 dari teks mentah yang Anda masukkan (termasuk itu Enter, itu adalah CR, IIRC).

Lebih sedikit untuk mengetik dan tanpa perpipaan! Dan menghindari kata sandi plaintext Anda direkam dalam riwayat shell! Merayu!

Jika Anda tidak ingin trailing CR itu (yang biasanya terjadi jika Anda ingin kata sandi hash), jangan tekan Entersebelum Ctrl+ D, masukkan Ctrl+ Ddua kali sebagai gantinya.

Akan
sumber
2

Dalam skrip saya, saya menemukan bahwa ada 2 hal yang harus Anda ketahui tentang masalah ini.

  • Tidak masalah jika Anda melakukannya echo "$myvariable"atau echo -n "$myvariable" tetapi Anda harus selalu menggunakan doubleqoutes untuk string dan selalu menggunakan metode yang sama. jika tidak semuanya tidak akan cocok.
  • dalam output Anda selalu mendapatkan spasi tambahan dan tanda hubung seperti yang ditunjukkan pada contoh:

    $ echo -n Welcome | md5sum
    7803ffcaea43bb81a439fde13b29bc35  -
    

untuk menghilangkannya dan tetap hanya dengan kode 7803ffcaea43bb81a439fde13b29bc35, lakukan:echo "$myvariable" | md5sum | cut -d" " -f1

Bodo Hugo Barwich
sumber
Jangan lupa -nparameter di sini untuk menghindari keluaran baris baru, yang akan mengarah ke md5 yang salah:echo -n $myvariable | md5sum | cut -d" " -f1
derFunk
1

Ada banyak contoh untuk melakukan ini, tetapi beberapa di antaranya tidak setara karena beberapa dari mereka secara eksplisit atau implisit menyertakan baris baru, dan beberapa lainnya tidak.

Saya ingin secara jelas menentukan metode populer mana yang termasuk baris baru dan mana yang tidak.

Berikut adalah beberapa contoh untuk menghitung hash md5 TANPA trailing newline (CORRECT):

Menggunakan file dengan teks:

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

Catatan: -n dalam echoberarti: "jangan tampilkan baris baru".

Menggunakan echodengan -ninline:

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

Menggunakan printf:

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

Hanya menggunakan md5sumperintah:

(Mari kita menulis md5sum, tekan Enterlalu tulis string testdan kemudian tekan kombinasi ganda Ctrl+ d)

$ md5sum
test098f6bcd4621d373cade4e832627b4f6  -

Menggunakan md5sum -perintah:

(Mari kita menulis md5sum -, tekan Enterlalu tulis string testdan kemudian tekan kombinasi ganda Ctrl+ d)

$ md5sum -
test098f6bcd4621d373cade4e832627b4f6  -

Berikut adalah beberapa contoh untuk menghitung hash md5 DENGAN trailing newline (JADI TIDAK BENAR):

Menggunakan file dengan teks:

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

Menggunakan echoTANPA -nsebaris:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Menggunakan string di sini :

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Hanya menggunakan md5sumperintah tetapi dengan Enterkunci setelah menulis teks:

(Mari kita menulis md5sum, tekan Enterlalu tulis string testdan kemudian tekan agaien Enterdan sekali kombinasi Ctrl+ d)

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Menggunakan md5sum -perintah tetapi dengan Enterkunci setelah menulis teks:

(Mari kita menulis md5sum -, tekan Enterlalu tulis string testdan kemudian tekan agaien Enterdan sekali kombinasi Ctrl+ d)

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
simhumileco
sumber