1

重複の可能性:
PHPを使用して画像が一意であるかどうかを確認する良い方法は何ですか?

ユーザーはフォームを介して画像(、、)をpngアップロードします。hash_fileを使用してdbをチェックし、イメージがすでにアップロードされているかどうかを確認していますが、一意ではないことに気づきました。jpggif

これはバグですか、それともファイルの一意のIDを生成するために他の何かを使用する必要がありますか?

回避策はmd5(filesize($file) . $hash)

ログからの更新 ...最初のセットはmd5_fileを使用し、2番目はhash_fileからsha256を使用しています...

ハッシュ:SELECT SiteID FROM tbl_image_hashes WHERE SiteID = 0 AND Hash ='d41d8cd98f00b204e9800998ecf8427e'
ハッシュ:SELECT SiteID FROM tbl_image_hashes WHERE SiteID = 0 AND Hash ='d41d8cd98f00b204e9800998ecf8427e'

ハッシュ:SELECT SiteID FROM tbl_image_hashes WHERE SiteID = 0 AND Hash ='e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
ハッシュ:SELECT SiteID FROM tbl_image_hashes WHERE SiteID = 0 AND Hash ='e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
ハッシュ:SELECT SiteID FROM tbl_image_hashes WHERE SiteID = 0 AND Hash ='e3b0c44298fc1c
20130117T231016:booru.pixymedia.us/utilities/batchExistingUpload.php
ハッシュ:SELECT SiteID FROM tbl_image_hashes WHERE SiteID = 0 AND Hash ='e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
ハッシュ:SELECT SiteID FROM tbl_image_hashes WHERE SiteID = 0 AND Hash ='e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
ハッシュ:SELECT SiteID FROM tbl_image_hashes WHERE SiteID = 0 AND Hash ='e3b0c44298fc1c

そして、SQLは正しくありません...私はこの関数で3,000個のファイルを正常にアップロードしました...

これはハッシュ生成コードです:

$fileHash = hash_file("sha256",$FILE["tmp_name"]);

$FILEは基本的に$_FILEであり、関数パラメーターの名前はこれだけです。

4

3 に答える 3

5

d41d...427eおよびは、空の文字列(たとえば、および)e3b0...b855のMD5とSHA256の合計です。これらがデータベースにあるという事実は、コードに何か問題があることを示しています。ある時点で間違ったファイル名をハッシュしている可能性があります。md5("")sha256("")

于 2013-01-18T05:07:01.250 に答える
1

画像データを操作する際の問題は、同じ画像をさまざまな方法で表現できることです。これは特にGIFに当てはまります。この場合、カラーテーブルは任意の順序にすることができ、結果は同じです。

おそらく、画像自体をハッシュする方法を考え出す必要があります。これを行うには、各ピクセルの色を読み取り、そこから何らかのハッシュを生成します。または、GDを使用して画像を読み込み、画像をで出力して「正規化」しimagegd()、それを使用して一意性を確認することもできます。

于 2013-01-18T04:02:31.583 に答える
0

異なるファイルに対して同じハッシュ値を取得している場合は、次の可能性を検討してください。

  1. ハッシュが正しく生成されていません(=>入力を確認してください!<=); また、
  2. 使用されるハッシュは十分な品質ではありません(SHA-xで十分です)。また、
  3. ハッシュの実装は壊れています(疑わしいですが、ここではそうではありません)。また、
  4. それらのファイルには実際には同じ内容が含まれています(falseと判断されます)

偶発的なSHA-x衝突の可能性は非常に低いです。これは確率表ですが、これがどれほどありそうもないかを正確に示す正義はありません。160ビットハッシュに関するこの記事は、下部に同等のスケールがあります..流星にぶつかる可能性が高くなります!

いずれにせよ、#1は確かに犯人です。

ヒント:hash("sha256", "")

于 2013-01-18T04:18:46.000 に答える