端末で文字列のMD5ハッシュを直接取得する方法は?


189

端末から文字列のMD5ハッシュを直接取得するにはどうすればよいですか?

たとえば、文字列をabcdefgハッシュ化する必要があります。現在、md5sumコマンドは入力としてファイル名のみを受け入れます。次の行を入力するだけですべてが完了します。

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

どうすればそれを達成できますか?


2
md5 -s abcdefg
18

回答:


252

また、このようなことを言うことができます:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

基本的に@enzotibで説明されているのと同じことを行いますが、おそらく少し単純です。


2
7803ffca ...は改行が追加された結果あるため、サンプルの結果も更新します。上記のコマンドの正しい結果は次のとおりです83218ac34c1834c26781fe4bde918ee4 -
-Xanthir

19
最後にスペースとダッシュがあるのはなぜですか?
ケーン

1
間違っている場合は修正してください。ただし、これは、関連する名前を持つファイルコンテンツを読み取るのではなく、MD5sumがデータストリームに適用されたためだと思います。
jfmessier

11
-nは必須であることに注意してください。それがないと、改行文字が含まれているため、ハッシュはまったく間違っています。
ピティコス

1
-最後にどのように無視できますか。@jfmessier
alper

61

非常にシンプルで、標準入力を受け入れるため、

md5sum <<<"my string"

シェルによって追加される末尾の改行を回避するには:

printf '%s' "my string" | md5sum

@messierと@enzotibの両方に投票権を与えます。どちらも私の大事な「エレガントなシンプルさ」カテゴリーに分類されます。<<<"スクリプトでパイプを使用する傾向があります。echo stringコマンドラインで勝ちます。よくやった。
トム

3
printf正しく使用するために+1 。を使用せずに合計を取得する場合は-、を入力し| cut -d ' ' -f 1ます。使用例:sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)
Lekensteyn

1
奇妙ですが、<<<演算子とprintf関数はmd5ハッシュに対してまったく異なる結果を与えています!しかし、printfの結果は正しいです!
ハメドモメニ

<<<演算子を使用すると、md5sumに改行が送信されるようです。
ハメドモメニ

1
はい、それは、最初と2番目の例の間で言ったように、
enzotib

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

シェルスクリプトを作成できます。

たとえば、スクリプト名はmd5.shです。

#!/bin/bash

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

許可の実行:

 chmod +x md5.sh

次に:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e

システムがmacOSの場合。このスクリプトを変更する必要があります。

$ echo -n 123456 | md5 | awk '{print $1}' 
e10adc3949ba59abbe56e057f20f883e

1
これは長すぎます。
グチョCa

1
awkの代替:cut -d ' ' -f 1
phil294

md5() { echo -n $1 | md5sum | awk '{print $1}'; }.bashrcに関数を作成$ md5 testし、コマンドラインで使用できます。回答をありがとう
ルーベンベンジャミン

短いawkコマンド:'$0=$1'
Alex Stragies

@AlexStragiesうん
ty4z2008

10

引数なしでmd5sumを実行すると、ターミナルから入力が読み取られます。必要なものを入力または貼り付け、完了したらを押しctrl-dて入力を終了します。


1
ええ、あなたも正しいです。ただし、機能さctrl+dせるには2回押す必要があります。
ハメドモメニ

@James、改行が続かない場合は、はい。Enterキーを押した後にヒットした場合、必要なのは1回だけです。改行が続かない場合、改行を待つのではなく、これまでに入力したすべての文字をただちに処理するよう強制します。
-psusi

10
openssl md5 filename
openssl sha1 filename

エコーを使用したコンテンツの文字列パイプ

echo -n 123456 | openssl md5

4

--helpfor でのクイックポークはmd5sum、コマンドが次のことを示しています。

md5sum -

その後、簡単な入力を求めるプロンプトが表示されます。テキストを入力しEnter、次にCtrl+ Dを使用してファイルの終わりを示すと、入力しmd5sumた生のテキストのMD5が吐き出されます(それを含むEnter、CR、IIRC)。

入力が少なく、配管なし!そして、あなたの平文パスワードがシェル履歴に記録されるのを避けます!わー!

末尾のCRが必要ない場合(通常、パスワードをハッシュする場合)、+のEnter前にヒットしないで、代わりに+を2回入力します。CtrlDCtrlD


2

私のスクリプトでは、この問題について知っておくべきことが2つあることがわかりました。

  • 行うecho "$myvariable"かどうかは関係ありませんがecho -n "$myvariable" 、常に文字列にdoubleqoutesを使用し、常に同じメソッドを使用する必要があります。そうでなければ、物事は一致しません。
  • 出力では、例に示すように、常に末尾のスペースとダッシュが表示されます。

    $ echo -n Welcome | md5sum
    7803ffcaea43bb81a439fde13b29bc35  -
    

それを取り除き、コードだけにとどまるには7803ffcaea43bb81a439fde13b29bc35、次のようにします:echo "$myvariable" | md5sum | cut -d" " -f1


忘れてはいけない-n間違ったMD5につながる末尾の改行を出力避けるために、ここでパラメータを:echo -n $myvariable | md5sum | cut -d" " -f1
derFunk

1

これを行うには多くの例がありますが、明示的または暗黙的に改行を含むものとそうでないものがあるため、それらのいくつかは同等ではありません。

人気のあるメソッドのうち、改行を含むメソッドと含まないメソッドを明確に指定したいと思います。

以下は、末尾改行なしのmd5ハッシュの計算(CORRECT)の例です。

テキストを含むファイルの使用:

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

注: -nは、echo「末尾の改行を出力しない」という意味です。

使用echoして-nインライン:

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

を使用してprintf

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

md5sumコマンドのみを使用:

(書き込みmd5sum、プレスEnter、文字列の書き込み、testダブルコンビネーションCtrl+の順に押してみましょうd

$ md5sum
test098f6bcd4621d373cade4e832627b4f6  -

md5sum -コマンドを使用:

(書き込みmd5sum -、プレスEnter、文字列の書き込み、testダブルコンビネーションCtrl+の順に押してみましょうd

$ md5sum -
test098f6bcd4621d373cade4e832627b4f6  -

末尾の改行を使用してmd5ハッシュを計算するためのいくつかの例を示します(正しくない):

テキストを含むファイルの使用:

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

echoWITHOUT -nインラインの使用:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -

ここで文字列を使用する

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -

テキストのみを記述した後md5sumEnterキーのみでコマンドのみを使用します。

(書き込みmd5sum、を押してEnterから文字列testを書き込み、次にagaien Enterを押して、一度組み合わせてみましょうCtrl+ d

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

テキストを書き込んmd5sum -Enter後、キーを使用してコマンドを使用します。

(書き込みmd5sum -、を押してEnterから文字列testを書き込み、次にagaien Enterを押して、一度組み合わせてみましょうCtrl+ d

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.