3

MD5 サムの取得は、ファイルの複製をチェックするのにまだ適していますか? 安全ではないことはわかっていますが、ファイルの複製を見つけようとする場合、それは本当に重要ですか?

代わりに SHA ファミリの何かを使用する必要がありますか?

このユースケースのベストプラクティスは何ですか?

4

8 に答える 8

6

この特定のケースでは、アルゴリズムの選択はおそらくそれほど重要ではありません。MD5 で SHA1 を使用する主な理由はすべて、暗号的に安全な署名の作成に関連しています。

MD5 は、このタスクには完全に受け入れられるはずです。なぜなら、人々が悪意を持ってファイルを作成し、誤った複製を生成することをおそらく心配する必要がないからです。

于 2010-01-03T02:12:13.187 に答える
2

パフォーマンスが気になる場合は、最初にファイルサイズの一致を確認してから、高速ハッシュ関数 (SHA1 よりも高速な CRC32 または MD5) を使用し、MD5、SHA1 またはSHA256 (タスクの重要度による)。

于 2010-01-03T02:49:52.907 に答える
1

SHA1 は MD5 よりもチェックサムとしてわずかに優れています。それは Git が使用するものです。

于 2010-01-03T02:11:21.640 に答える
1

MD5 には現時点で既知の脆弱性がありますが、アプリケーションにとっては問題にならない可能性があります。ビットの山を区別するのにはまだかなり適しています。アルゴリズムが決定論的であるため、何かが一致しない場合は、まだ見ていないことがわかります。何かが一致として返された場合、それが実際に重複しているかのように振る舞う前に、表面上は一致した blob と実際に比較する必要があります。MD5 は比較的高速ですが、ハッシュの衝突で全文を比較する余裕がない場合は、SHA-256 などのより強力なハッシュを使用する必要があります。

于 2010-01-03T02:12:11.763 に答える
1

説明の目的では、実際に好ましい解決策はありません。両方のハッシュ関数が問題を解決します。とにかく、MD5 は通常 SHA1 よりもわずかに高速です。

Python での例:

#!/usr/bin/env python

import hashlib, cProfile

def repeat(f, loops=10000000):
    def wrapper(): 
        for i in range(loops): f()
    return wrapper

@repeat
def test_md5():
    md5 = hashlib.md5(); md5.update("hello"); md5.hexdigest()

@repeat 
def test_sha1():
    sha = hashlib.sha1(); sha.update("hello"); sha.hexdigest()

cProfile.run('test_md5()')
cProfile.run('test_sha1()')

#
#         40000004 function calls in 59.841 CPU seconds
# 
# ....
#
#         40000004 function calls in 65.346 CPU seconds
# 
# ....
于 2010-01-03T02:27:03.730 に答える
1

あなたが話しているのはチェックサムです。これは、暗号化ハッシュに関連しています (ただし、同じではありません)。

はい、悪意のあるユーザーが同じチェックサムで 2 つの異なるファイルを意図的に作成することに関心がない限り、MD5 と CRC の両方がチェックサムとして問題なく機能します。それ懸念される場合は、SHA1 を使用するか、暗号的に壊れていないハッシュを使用することをお勧めします。

于 2010-01-03T02:33:36.850 に答える
0

私の仕事では、まさにあなたが検討していることに MD5 を使用しています。よく働く。顧客ごとにアップロードの重複を検出するだけでよいため、誕生日の問題が発生しにくくなりますが、顧客ごとではなくすべてのアップロードで重複を検出する必要がある場合でも、md5 で十分です。インターネットを信じることができるなら、n 個のサンプルと b のハッシュ サイズが与えられた場合、衝突の確率 p は次のように制限されます。

p <= n (n - 1) / (2 * 2 ^ b)

数年前、私は n = 10^9 と b = 128 に対してこの計算を実行し、p <= 1.469E-21 を得ました。大局的に見ると、10^9 ファイルは 32 年間で 1 秒あたり 1 ファイルです。そのため、衝突が発生した場合にファイルを比較しません。md5 がアップロードが同じであると言う場合、それらは同じです。

于 2010-01-03T06:17:20.110 に答える
0

MD5 には衝突がいくつかありますが、私は常にファイルに MD5 を使用しており、問題なく動作しています。

于 2010-01-03T02:12:30.907 に答える