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?


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.


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

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

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.


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

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.


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


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  -
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.