42312


ファイルの同一性を確認するのにハッシュを使って行うことを考えています。  
MD5, SHA-1, SHA-2, SHA-256, SHA-3, BLAKE, CRC, RIPEMD など  
ありますが、  
(質問1) 高速でかつ軽量（CPU負荷が軽い)のはどれなのでしょうか？

また一点疑問があります。  
ファイル名は異なりますが内容が同一だった場合、ハッシュ値が同じになるとWEB記事で見ていますが、ファイル名が異なればファイル名の部分はデータが違うので、同じハッシュ値にならないのでは？と考えてしまいます。  
(質問2) これは何故いっしょのハッシュ値になるのでしょうか？

質問に対しそれぞれ別にご回答いただいてもかまいません。ご存知の方、ご教示いただけると幸いです。


CC BY-SA 3.0
2018-03-10T15:44:23.790
42301
2018-10-04T17:23:05.323
2018-10-04T17:23:05.323
19769
8593
question
ハッシュ
ファイルの同一性を確認するのに最適なハッシュ方法及び疑問


普通、ファイルのハッシュ値というのは、ファイル内容のハッシュ値を指します。  
ファイル名はハッシュには入りません。

そのなかで一番軽量、高速なのはCRCですね。


CC BY-SA 3.0
2018-03-10T15:52:10.490
42302
2018-03-10T15:52:10.490
27481
42301
answer


まず第一に、CRCは誤り検出符号であってそのような用途に使ってはいけません。

用途次第ですが、一般論としてMD5、SHA-1、RIPEMDはすでに使うべきでないとされています。BLAKEは一般的に使われていません。

SHA-2、SHA-3には出力されるハッシュ値の長さにいくつかバリエーションがあり、それぞれでスループットが変わります。

SHA-256はSHA-2のうちの一つです。

ということで比較できる選択肢がなくなりましたが、一般的にはSHA-256使っておけばよいです。

「ファイルの同一判定」と書かれていますが、ハッシュ値で比較する場合一般には中身の「データ」だけです。ハッシュ値を計算するプログラムのほとんどはそのように作られています。ファイル名やタイムスタンプの同一性まで含めるのであれば、ハッシュ値を計算する際にそれらも含めるように考えるか、別途比較する必要があります。


CC BY-SA 3.0
2018-03-11T02:16:12.650
42312
2018-03-11T02:16:12.650
5793
42301
answer


ご質問の文面から、二つのファイルがどこに存在しているのか、わかりませんでした。

比較したいファイルが、ひとつのコンピューター上に存在しているなら、ファイル全体を読み込んで、完全一致比較するのが最も高速で軽いです。

比較したいファイルが、ネットワーク越しの離れた場所にある場合、SHA-256くらいが妥当だと思います。バージョン管理ツールのGitではSHA-1を採用しており、実用上それでも充分だという考えはあり得ます。


CC BY-SA 3.0
2018-03-11T04:06:21.870
42316
2018-03-11T04:06:21.870
3337
42301
answer