[Linux] ファイルの MD5|SHA1 ハッシュ値を計算|照合する

Posted by
ぴろり
Posted at
2017/01/28 18:12
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
開発メモ カテゴリ
カバーイメージ

 Linux マシンで、ファイルの MD5 や SHA1 ハッシュ値を計算したり、また計算済みのハッシュ値を用いてファイルを照合する覚書き。

このエントリーをはてなブックマークに追加  

 危うくプログラムを自分で書きそうになったところ*1便利なコマンドが既にあるわけでcatface.gif 様々なハッシュ アルゴリズムが用意されていますが、とりあえず、よく使うであろう MD5 と SHA1 だけでも覚えておくと便利かもしれません。CRC32 もあると便利だったのに。

ファイルのハッシュ値を計算する

 一つ以上のファイルをまとめて指定できます。

$ md5sum file1.txt file2.txt file3.txt >files.md5
$ cat files.md5
e7b37f993271bcecbc5d0acac01b5511  file1.txt
ecb6d3479ac3823f1da7f314d871989b  file2.txt
e894a56c64e73e3bcbaf72f9fb8ff3d9  file3.txt

$ sha1sum file1.txt file2.txt file3.txt >files.sha1
$ cat files.sha1
96f76d144bfec0b5d41e97ed4285bdc84180c719  file1.txt
58f0551b43a154655db68d9065aeedf6cb192856  file2.txt
79d58526d0e0bf4df4f01b383ed3f49c428aaa2a  file3.txt

ファイルのハッシュ値を照合する

 これが地味に便利そう。-c オプションに計算済みのハッシュ値とファイル名のリストを与えると、これを照合します。

$ md5sum -c files.md5 # または
$ cat files.md5 |md5sum -c
file1.txt: 完了
file2.txt: 失敗
file3.txt: 完了
md5sum: 警告: 1 個の計算したチェックサムが一致しませんでした

データ列のハッシュ値を計算する

 文字列などのデータ列からハッシュ値を計算する場合、コマンドの標準入力にパイプします。下記のように echo を無指定で使うと、文字列の末尾に改行コードが入るためハッシュ値が違ってきますので注意。

$ echo    "Hello" |sha1sum # 文字列+改行コード
1d229271928d3f9e2bb0375bd6ce5db6c6d348d9  -
$ echo -n "Hello" |sha1sum # 末尾の改行コードを除いた場合
f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0  -

ハッシュ値のリスト

 -c オプションを指定した際に与えられるハッシュ値とファイル名のリストですが、ファイル内容をいじってカット&エラーしてみたところ、書式に関して幾つか制限があるようです。

# コメント
   # 空白が先行するコメント行 

96f76d144bfec0b5d41e97ed4285bdc84180c719  success.txt
96f76d144bfec0b5d41e97ed4285bdc84180c719 file1.txt
96f76d144bfec0b5d41e97ed4285bdc84180c719    file1.txt
    58f0551b43a154655db68d9065aeedf6cb192856 file2.txt
79d58526d0e0bf4df4f01b383ed3f49c428aaa2a  file3.txt # comment
  1. 行頭から # で始まる行は、コメント行として無視されます。
  2. # の前に空白やタブが先行する場合、書式が不適切として警告されます。
  3. 空行も書式が不適切として警告されます
  4. この行は元の書式のままで、正しく処理されます。
  5. ハッシュ値とファイル名を区切る空白が少ないと、書式が不適切として警告・無視されます。
  6. ハッシュ値とファイル名を区切る空白が多いと、余分な空白を含んだファイル名のファイルを開こうとしてエラーになります。
  7. ハッシュ値の前に空白やタブがある場合、書式が不適切として警告・無視されます。
  8. ファイル名の後に # を続けてコメントを書いても、それを含めたファイル名のファイルを開こうとしてエラーになります。

 書式に融通がほとんどきかない感じ。まぁ、# でコメントを書き足すくらいに留め、あまり派手には弄らない方が良いでしょう。

参考リンク

このエントリーをはてなブックマークに追加  

  1. *1 実は Perl で半分くらいまで書いていた


関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。