「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でお手軽にハッシュ値を計算できるのもポイント高いですね。
コメント