6

2つのファイルが同じであるかどうかを判断する信頼できる方法はありますか?たとえば、同じサイズとタイプの2つのファイルは、同じバイナリである場合とそうでない場合があります(ええ、それは実際には単語ではないことを私は知っています)。ファイルの1つまたは2つのチェックサムを比較すると役立つと思いますが、次のように思います。

  1. 2つのファイルが異なるかどうかを判断する際のチェックサムの信頼性。2つの異なるファイルが同じチェックサムを持つ可能性はどのくらいありますか?
  2. 追加のチェックサム比較を適用することで信頼性が向上しますか?
  3. どのチェックサムアルゴリズムが最も効率的および/または信頼できるでしょうか?

どんなアイデア、提案、考えも大歓迎です!

PSこのコードは、nixシステムで実行されているJavaで記述されていますが、汎用またはプラットフォームに依存しない入力が最も役立ちます。

4

4 に答える 4

6

バイトごとに比較しない限り、2 つのファイルが同じかどうかを確実に知ることは不可能です。コレクション内のすべてのアイテムをチェックしない限り、コレクションに特定のオブジェクトが含まれているか含まれていないかを保証できないのと似ています。

チェックサムは基本的にハッシュです。それらが目的に十分かどうかは、アプリがどれほどミッション クリティカルであるかによって異なります。衝突のリスクが低いハッシュ関数を作成することは確かに可能です。結局のところ、機密データが保護されていて、アカウントに 2 つ目の有効なパスワードを持ちたくない場合でも、パスワードはハッシュされます。たとえば銀行向けのコードを書いているのでない限り、強力なチェックサム アルゴリズムは非常に適切な近似値を提供するはずです。

複数のチェックサムを使用すると、異なるチェックサム アルゴリズムが異なるハッシュ関数を使用する場合にのみ、信頼性が向上します。

3 番目の質問は、leonbloy の回答によって既に処理されています。MD5 と SHA-1 が一般的です。

于 2010-05-11T17:33:13.150 に答える
5
1) Very reliable
2) Not theoretically
3) SHA-1
于 2010-05-11T17:21:49.837 に答える
0

どのチェックサムでも、非常に少数のケースで誤検知が発生します。それと一緒に暮らすことができれば、大丈夫です。そうでない場合、これを行う方法は、最初にチェックサムの比較を行い、チェックサムが等しい場合は、バイトごとのテストを行います。バイトごとのテストはめったに行われないため、多くの比較で平均化されたコストは非常に小さくなります。ただし、比較のほとんどが「true」を返すと予想される場合は、そうではありません。

また、テストするファイルの数によっても異なります。信頼性の高いチェックサムの計算は、比較を行うのとほぼ同じくらいコストがかかります。各ファイルが約 1 回比較される場合、比較を行う方が安くなる可能性があります。

于 2010-05-11T18:04:36.147 に答える
0

MD5 などの標準的なチェックサム アルゴリズムは、ほとんどの実際のシナリオで信頼性の高いテストを提供します。さらに信頼性が必要な場合は、SHA を使用してください。http://en.wikipedia.org/wiki/Cryptographic_hash_function#Cryptographic_hash_algorithms

于 2010-05-11T17:24:20.877 に答える