server-memo.net

【MD5 SHA1 SHA256 CRC】ハッシュ値(チェックサム)の確認方法

   

「MD5」「SHA1」「SHA256」「CRC」といった形式のハッシュ値を計算する方法です。

ハッシュ値を比較してファイルの同一性を確認しよう

何かしらのデータをダウンロードしたりコピーする際に、そのデータが配布元のデータと同じであること(データが壊れていないか、改ざんされていないか)を確認することはとても大切なことです。

データの同一性を確認するには、ダウンロードしたデータのハッシュ値を計算して、データの配布元で用意されている「MD5」「SHA1」「SHA256」「CRC」等のハッシュ値と比較することで、ダウロードしてきたデータが破損していなか、改ざんされていないことを確認することができます。

今回はLinux環境とWindows環境のそれぞれで、各形式のハッシュ値を計算する方法ついて説明していきます。

Linux環境

Linux環境で「MD5」「SHA1」「SHA256」「CRC」のハッシュ値を計算する方法をまとめています。

「md5sum」コマンド(MD5)

「md5sum」コマンドを使用することで、「MD5」アルゴリズムでのハッシュ値を計算できたり、ハッシュ値が記述されているファイルを使用することで、データの同一性をチェックすることが出来ます。

MD5ハッシュ値の計算方法

「md5sum」コマンド後にハッシュ値を計算したいデータを指定することで、「MD5」アルゴリズムのハッシュ値を計算することが出来ます。

md5sum データ名

今回は、例として「test1.txt」というファイルのMD5ハッシュ値を計算してみます。

$ md5sum test1.txt
39a870a194a787550b6b5d1f49629236  test1.txt

上記の例では「39a870a194a787550b6b5d1f49629236」の部分がハッシュ値となります。

ファイルの同一性を確認(-c,--check)

「-c」や「--check」オプションを使用すると、ハッシュ値が記述されているファイルを読み込んでデータが同じものなのかを確認することが出来ます。

md5sum --check ハッシュ値ファイル
実行例

まず「MD5」ハッシュ値が記述されているファイルを用意します。

今回はテスト用に準備した「test1.txt」「test2.txt」という2つのファイルのハッシュ値が記載されている「file.md5」というファイルを作成しました。

$ md5sum test1.txt >  file.md5
$ md5sum test2.txt >>  file.md5

ファイルの中身は下記のようになります。

$ cat file.md5
39a870a194a787550b6b5d1f49629236  test1.txt
e5ed594926ebfdd06ccd2880acd45fdf  test2.txt

「--check」オプションを使って「file.md5」ファイルを読み込むとこで、「test1.txt」と「test2.txt」のハッシュ値を計算して、「file.md5」ファイルに記載されているハッシュ値と比較して値が同じであるかどうか確認してくれます。

データが同一である場合は「OK」と表示されます。

$ md5sum --check file.md5
test1.txt: OK
test2.txt: OK

ここで、「test1.txt」ファイルの内容を変更してから再度チェックしてみると、ハッシュ値が異なるため「FAILED」と表示されます。

$ md5sum --check file.md5
test1.txt: FAILED
test2.txt: OK
md5sum: WARNING: 1 computed checksum did NOT match

「sha1sum」「sha256sum」コマンド(SHA1/SHA256)

「sha1sum」コマンドや「sha256sum」コマンドを使用することで、「SHA1」「SHA256」アルゴリズムのハッシュ値を計算することができます。(ちなみに「sha224sum」「sha384sum」「sha512sum」といったコマンドもあり、それぞれに対応した形式のハッシュ値を計算することができます)

また、「md5sum」コマンドと同様にハッシュ値が記述されているファイルを使用することで、データの同一性をチェックすることが出来ます。

SHA1/SHA256のハッシュ値計算方法

SHA1のハッシュ値を計算するには「sha1sum」コマンドを使用し、SHA256のハッシュ値を計算するには「sha256sum」コマンドを使用します。

sha1sum データ
sha256sum データ

例として「test1.txt」ファイルの「SHA1」のハッシュ値を計算してみます。

$ sha1sum test1.txt
a5105d3fcba551031e7abdb25f9bbdb2ad3a9ffa  test1.txt

「a5105d3fcba551031e7abdb25f9bbdb2ad3a9ffa」の部分がハッシュ値となります。

次に「SHA256」形式のハッシュ値を計算してみます。

$ sha256sum test1.txt
0c15e883dee85bb2f3540a47ec58f617a2547117f9096417ba5422268029f501  test1.txt

「SHA1」形式よりも暗号化の強度が上がっているので、ハッシュ値もSHA1形式より長くなっています。

ファイルの同一性を確認(-c,--check)

md5の場合と同じように「--check」オプションを使用すると、ハッシュ値が記載されているファイルを使用することで、データが同じかどうかを確認することが出来ます。

「test1.txt」「test2.txt」という2つのファイルのハッシュ値が記載されている「file.sha1」というファイルを作成しました。

「file.sha1」ファイルの中身は下記のようになっています。

$ cat file.sha1
a5105d3fcba551031e7abdb25f9bbdb2ad3a9ffa  test1.txt
8689b47c8c6e68b65260512a6b89c86d41e59daa  test2.txt

「--check」オプションを使って「file.sha1」ファイルを読み込むとこで、「test1.txt」と「test2.txt」のハッシュ値を計算して、「file.sha1」ファイルに記載されているハッシュ値と比較して値が同じであるかどうか確認してくれます。

$ sha1sum --check file.sha1
test1.txt: OK
test2.txt: OK

「test1.txt」ファイルのデータを編集してから再度確認してみると、当然ですが「FAILED」と表示されてデータが異なることがわかります。

$ sha1sum --check file.sha1
test1.txt: FAILED
test2.txt: OK
sha1sum: WARNING: 1 computed checksum did NOT match

OpenSSLコマンドを使用(MD5/SHA1/SHA256)

opensslコマンドでも「MD5」「SHA1」「SHA256」といったハッシュの形式を指定することで、それぞれのハッシュ値を計算することができます。

openssl md5 データ  (MD5形式の場合)
openssl sha1 データ   (SHA1形式の場合)
openssl sha256 データ (SHA256形式の場合)

「openssl」コマンドで指定できる形式は下記の通りとなります。

  • md2(MD2形式)
  • md5(MD5形式)
  • mdc2(MDC2形式)
  • rmd160(RMD-160形式)
  • sha(SHA形式)
  • sha1(SHA1形式)
  • sha224(SHA224形式)
  • sha256(SHA256形式)
  • sha384(SHA384形式)
  • sha512(SHA512形式)

各形式のハッシュ値計算例

MD5形式
$ openssl md5 test1.txt
MD5(test1.txt)= 39a870a194a787550b6b5d1f49629236
SHA1形式
$ openssl sha1 test1.txt
SHA1(test1.txt)= a5105d3fcba551031e7abdb25f9bbdb2ad3a9ffa
SHA256形式
$ openssl sha256 test1.txt
SHA256(test1.txt)= 0c15e883dee85bb2f3540a47ec58f617a2547117f9096417ba5422268029f501

「cksum」コマンド(CRC)

「cksum」コマンドを使用することでCRCの値を計算することが出来ます。

cksum データ名

例として、実際に「test1.txt」というファイルのCRC(巡回冗長検査)値を計算してみます。

$ cksum test1.txt
3384659006 10 test1.txt

「3384659006」の部分がCRC値となり、「10」の部分はファイルサイズを表しています。

Windows環境

Windows環境で「MD5」「SHA1」「SHA256」「CRC」のハッシュ値を計算する方法をまとめています。

certutilコマンド(MD5/SHA1/SHA256)

Windowsに標準で用意されている「certutil」コマンドを使用すると、「MD5」「SHA1」「SHA256」といった形式のハッシュ値を計算することが出来ます。

certutil -hashfile データ MD5  (MD5形式)
certutil -hashfile データ SHA1  (SHA1形式)
certutil -hashfile データ SHA256  (SHA256形式)

「certutil」コマンドで指定できるハッシュ形式は以下の通りです。

  • MD2
  • MD4
  • MD5
  • SHA1
  • SHA256
  • SHA384
  • SHA512

データの後で計算したい形式を指定することで、その形式のハッシュ値を計算することが出来ます。

各形式のハッシュ値計算例

MD5形式
certutil -hashfile test1.txt MD5
MD5 ハッシュ (ファイル test1.txt):
39a870a194a787550b6b5d1f49629236
CertUtil: -hashfile コマンドは正常に完了しました。
SHA1形式
certutil -hashfile test1.txt SHA1
SHA1 ハッシュ (ファイル test1.txt):
a5105d3fcba551031e7abdb25f9bbdb2ad3a9ffa
CertUtil: -hashfile コマンドは正常に完了しました。

最後のハッシュの形式を指定する部分を省略した場合も「SHA1」形式で計算されます。

certutil -hashfile test1.txt
SHA1 ハッシュ (ファイル test1.txt):
a5105d3fcba551031e7abdb25f9bbdb2ad3a9ffa
CertUtil: -hashfile コマンドは正常に完了しました。
SHA256形式
certutil -hashfile test1.txt SHA256
SHA256 ハッシュ (ファイル test1.txt):
0c15e883dee85bb2f3540a47ec58f617a2547117f9096417ba5422268029f501
CertUtil: -hashfile コマンドは正常に完了しました。

PowerShellのGet-FileHash コマンドレット (MD5/SHA1/SHA256)

Windows PowerShellのv4からは「Get-FileHash」を使用することで、ハッシュ値を計算することが出来るようになりました。(PowerShell v4は「Windows8.1」や「Windows Server 2012R2」から採用されています)

Get-FileHash -Algorithm MD5 データ      (MD5形式)
Get-FileHash -Algorithm SHA1 データ     (SHA1形式)
Get-FileHash -Algorithm SHA256 データ   (SHA256形式)

「Get-FileHash コマンドレットで指定できるハッシュ形式は以下の通りです。

  • MD5
  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • MACTripleDES
  • RIPEMD160

「-Algorithm」の後に形式を指定することで、指定した形式のハッシュ値を計算することが出来ます。

各形式のハッシュ値計算例

「Format-List」コマンドレットを使って表示をリスト形式に整形しています。

MD5形式
PS D:\> Get-FileHash -Algorithm MD5 test1.txt | Format-List

Algorithm : MD5
Hash      : 39A870A194A787550B6B5D1F49629236
Path      : D:\test1.txt
SHA1形式
PS D:\> Get-FileHash -Algorithm SHA1 test1.txt | Format-List

Algorithm : SHA1
Hash      : A5105D3FCBA551031E7ABDB25F9BBDB2AD3A9FFA
Path      : D:\test1.txt
SHA256形式
PS D:\> Get-FileHash -Algorithm SHA256 test1.txt | Format-List

Algorithm : SHA256
Hash      : 0C15E883DEE85BB2F3540A47EC58F617A2547117F9096417BA5422268029F501
Path      : D:\test1.txt

7-Zipを使用(SHA1/SHA256/CRC)

フリーソフトの圧縮・解凍ソフトである「7-Zip」をインストールすると、ハッシュ値を計算したいデータを右クリックすることで表示されるメニューに「CRC SHA」という項目が追加されて、「CRC-32」「CRC-64」「SHA1」「SHA256」アルゴリズムのハッシュ値を計算することができるようになります。

ちなみに「*」を選ぶと、すべてのアルゴリズムのハッシュ値が表示されます。

「7-Zip」は「MD5」形式には対応していない変わりに「certutil」コマンドやPowerShellの「Get-FileHash」コマンドレットでは対応していない「CRC」形式に対応しています。

また、GUIでお手軽にハッシュ値を計算できるのもポイント高いですね。

 - Tips