sha1sumはファイルのSHA1アルゴリズムでのハッシュ値を計算するコマンドだ。
MDハッシュ値とは
ハッシュとは、ファイルやデータを数学的に圧縮したもので、内容が同じであれば同じ値になる。
SHA1アルゴリズムのハッシュ値は40個の16進数(160bit)で構成される文字列でほぼ無限の組み合わせと言える。
ファイルの偽造防止などに使われる。
ファイルやデータの中身が一つでも違うと全く違ったハッシュ値となる。
keyboardの文字のSHA1のハッシュ値は384a8a9f6c477b7be4999dd5118558c32a8ce1b8で、keyboard1の文字のハッシュ値はf70543455ab035ef44711a1f7c45e7f2691a91d7だ。
ファイル名が違っても内容が同じであればハッシュ値は同じになる。
例えば、一つのプログラムファイルをインターネットで公開したとしよう。
悪意を持った人間が、そのファイルにウィルスを仕掛けた場合、SHA1ハッシュ値は本来のものと全く違うものとなる。
このことを応用して、ファイル公開時に別の方法でファイルを入手したユーザーにSHA1ハッシュ値を知らせておけば、ユーザーがSHA1ハッシュ値をチェックすれば入手経路のどこかで何らかの改変があっても気づくことができるのだ。
sha1sumコマンドの基本
コマンドの基本動作
使い方は、次のとおりだ。
$ sha1sum ファイル名
ファイルga.txtのSHA1ハッシュ値を計算する場合は、次のコマンドだ。
$ sha1sum ga.txt
ファイルga.txtのSHA1ハッシュ値が計算され、結果とファイル名が表示された。
複数のファイルを指定する場合は、空白で列挙することもできる。
ファイル名にワイルドカードを指定するもこともできる。
kなんとか.txtというファイル名すべてのSHA1ハッシュ値を計算するコマンドは次の通りだ。
$ sha1sum k*.txt
kなんとか.txtというファイル名すべてのSHA1ハッシュ値が計算された。
ファイルではなく、文字列データに関してもSHA1ハッシュ値を計算できる。
その場合は、コマンドsha1sumのみ入力し、Enterキーを押す。
$ sha1sum
SHA1ハッシュ値を知りたい文字列を入力する。
今回は、「Japan 改行 America 改行」と入力した。
最後にCtrl+Dのキーを押すと、その文字列のSHA1ハッシュ値が表示される。
sha1sumコマンドのオプションたち
オプションの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション -b(オプション--binary)
ファイルをバイナリファイルとして扱う。
オプション -t(オプション--text)
ファイルをテキストファイルとして扱う。
オプション -c(オプション--check)
SHA1ハッシュ値とファイルが一致しているかチェックする。
オプション --quiet
一致しない場合のみ表示する。
オプション –status
結果を表示しない。
オプション-w(オプション—warn)
結果を表示する。
-bオプション(--binaryオプション):ファイルをバイナリファイルとして扱う
ファイルをバイナリファイルとして扱うオプションだ。
しかし、Linuxシステムおいてはバイナリファイルとテキストファイルの区別をしていないため、テキストファイルに対し-bオプションを指定しても指定しない時の値と同じ値を出力する。
バイナリファイルとテキストファイルに区別のあるOSにおいては、別のハッシュ値を出力する。
Linuxシステムにおいては、明示的にバイナリファイルと指定する場合に利用するといいだろう。
ハッシュ値を明示的にバイナリで計算する書式は次のとおりだ。
$ sha1sum -b ファイル名
ファイル/bin/lsのSHA1ハッシュ値をバイナリとして計算する場合は、次のコマンドだ。
$ sha1sum -b /bin/ls
ファイル/bin/lsのSHA1ハッシュ値が計算された。
-bオプションを付与した場合はファイル名の前に*が表示される。
-tオプション(--textオプション):ファイルをテキストファイルとして扱う
ファイルをテキストファイルとして扱うオプションだ。
しかし、Linuxシステムおいてはテキストファイルとバイナリファイルの区別をしていないため、バイナリファイルに対し-tオプションを指定しても指定しない時の値と同じ値を出力する。
バイナリファイルとテキストファイルに区別のあるOSにおいては、別のハッシュ値を出力する。
Linuxシステムにおいては、明示的にテキストファイルと指定する場合に利用するといいだろう。
ハッシュ値を明示的にテキストで計算する書式は次のとおりだ。
$ sha1sum -t ファイル名
ファイルga.txtのSHA1ハッシュ値をテキストとして計算する場合は、次のコマンドだ。
$ sha1sum -t ga.txt
ファイルga.txtのSHA1ハッシュ値が計算された。
-cオプション(--checkオプション):SHA1ハッシュ値とファイルが一致しているかチェックする
sha1sumは、あらかじめ用意されたSHA1ハッシュ値が対応するファイルと一致しているかチェックすることができる。
-cオプションはチェックするオプションだ。
チェックするには、SHA1ハッシュ値とファイル名の対応の一覧表を作成しておく必要がある。
一覧表は、SHA1ハッシュ値とファイル名が空白を空けて記録されていればよい。
簡単に一覧表を作成するには、sha1sumコマンドで作成した内容をファイルにリダイレクトした内容でよい。
チェックする場合は次の書式だ。
$ sha1sum -c 一覧表ファイル名
一覧表checkに記載されているファイルとSHA1ハッシュの組み合わせをチェックするには、次のコマンドだ。
$ sha1sum -c check
はじめにtなんとか.txtファイルすべてのSHA1ハッシュ値を取得し、内容をファイルcheckに書き出す。
そのファイルcheckの内容をチェックし、すべてのファイルのSHA1ハッシュ値とファイルの組み合わせが合っていることがわかった。
ファイルcheck内のファイルt4.txtのハッシュ値の一部を書き換え、同様にSHA1ハッシュ値をチェックした。
ファイルt4.txtのハッシュ値が一致しないので、FAILEDとなった。
--quietオプション:一致しない場合のみ表示する
チェック時に一致しない場合のみ表示するオプションで-cオプションと同時に使用する。
書式は次の通りだ。
$ sha1sum --quiet -c ファイル名
一覧表ファイルcheckに記載されているファイルとSHA1ハッシュの組み合わせをチェックし、一致しないもののみ表示するには、次のコマンドだ。
$ sha1sum --quiet -c check
一覧表checkに記載されているファイルとSHA1ハッシュの組み合わせをチェックし、一致しなかったファイルt4.txtがFAILEDで表示された。
--statusオプション:結果を表示しない
チェック時に結果を表示しないオプションで-cオプションと同時に使用する。
書式は次の通りだ。
$ sha1sum -- status -c ファイル名
一覧表ファイルcheckに記載されているファイルとSHA1ハッシュの組み合わせをチェックするが結果を表示しない場合には、次のコマンドだ。
$ sha1sum -- status -c check
一覧表ファイルcheckに記載されているファイルとSHA1ハッシュの組み合わせをチェックするが結果は表示しない。
意味がない動作のように思われるが、sha1sumの結果としての戻り値には値は戻ってきている。
echoコマンドと組み合わせればその内容を確認できる。
一覧表ファイルcに記載されているファイルとSHA1ハッシュの組み合わせをチェックしその戻り値を確認するには次のコマンドだ。
$ sha1sum -- status -c check ; echo $?
一覧表ファイルcに記録されているファイルとハッシュ値は一致している。
戻り値は0であった。
一覧表ファイルcのハッシュ値を一部変更し、再度戻り値を確認してみる。
戻り値は1であった。
sha1sumコマンドの戻り値はチェックの結果、一致していれば0、一致していなければ0以外のエラーコードを出力する。
このように—statusコマンドは、戻り値を参照し他の目的で活用する場合に利用する。
-wオプション(—warnオプション):結果を表示する
-cオプションだけを指定した時と同じく、すべての結果を表示する。
明示的に結果をすべて表示し、チェックする場合は次の書式だ。
$ sha1sum -w -c 一覧表ファイル名
明示的に結果をすべて表示し、一覧表checkに記載されているファイルとSHA1ハッシュの組み合わせをチェックするには、次のコマンドだ。
$ sha1sum -w -c check
ファイルt4.txtのハッシュ値が一致しないので、FAILEDとなった。
sha1sum関連コマンド
最後にsha1sumコマンドに関連して、基本的なハッシュ値計算のコマンドも紹介しておく
md5sumコマンド
MD5アルゴリズムでハッシュ値を計算する。
まとめ
このページでは、sha1sumコマンドを使ったハッシュ値の計算の方法を解説した。
ハッシュ値は、同じ内容で同じアルゴリズムであればどのコンピュータを使っても同じものが計算される。
メールやWebを介してやり取りされたファイルの送信元でファイルのハッシュ値を計算し、別ルートで受信者にハッシュ値を教えておけば、正しくファイルが送られたかもチェックできる。
また、圧縮ファイルに対してハッシュ値を計算して比較すれば、圧縮ファイル全体に変更がされているものか、同一のものかどうかのチェックができる。
ぜひ活用しよう。