0

私はこのコードを試しました

For i=1 to 1000000
mystring.s=Str(i)+"'2013-"+mm+"-"+dd+"','"+valoare+"','"+curs+"','"+total+"','"+Str(cont)+"','"+simbolcont+"','Denumire"+Str(i)+"','"+valuta.s+"','"+RSet(Str(i),40,"0")+"','"+total.s+"'"
id.s=UCase(MD5Fingerprint(@mystring.s,StringByteLength(mystring))+SHA1Fingerprint(@mystring,StringByteLength(mystring)))
Next i

上記のコードは Purebasic ですが、uniqueid にこれを使用するという原則にもっと興味があります。生成された 1,000,000 個の文字列で衝突は見つかりませんでした

MD5(文字列)+SHA1(文字列) の結果、uniqueid の 72 文字の文字列になりますか?

文字列は両方の関数で同じであり、長さは 300 ~ 350 文字であることに注意してください。

または簡単な質問

SHA1 が衝突した場合、同じ文字列の MD5 も衝突しますか? またはその逆?私は数学の天才ではありませんが、衝突係数は低いと思います..

ここでタイムスタンプに基づいてuniqueidを使用することはできません。

お時間をいただきありがとうございます。

4

1 に答える 1

0

他のフォーラムからの私自身の質問の引用に答えるに

は、異なる (s1 != s2) である 2 つのランダムな文字列 (s1、s2) がある場合、md5(s1) == md5(s2) AND sha1( s1) == sha1(s2)。

まず、ランダムに選択された 2 つの特定の文字列について、md5(s1) == md5(s2) である確率はどれくらいでしょうか? 最初のハッシュは 128 ビットの文字列であり、2 番目のハッシュが 2 番目のハッシュと等しい確率は 2^128 分の 1、つまり約 2.9 x 10^-37 % であるため、1/2^128 を答えてください。

同様に、P(sha1(s1) == sha1(s2)) = 2^-160 ~ 6.8 x 10^-47 %.

P(X AND Y) = P(X) P( Y) だから P(md5(s1)==md5(s2) AND sha1(s1) == sha1(s2)) = 2^-288 ~ 2 x 10^-85 %.

確かに、ハッシュ関数は文字列に対して互いに独立して動作すると仮定しました。これは、ハッシュ関数としての md5 と sha1 の公正な仮定です。しかし、MD5 と SHA-1 を比較する代わりに、MD5 と、それ自体に 100 回適用された MD5 だけの新しいハッシュ関数を比較すると、md5(s1) == md5(s2) の場合はいつでも、 md5^100(s1) == md5^100(s2) なので、両方が衝突する確率は、1 回衝突する確率と同じです。

同様に、単に silly_hash(s) = md5(s) ++ s (++ は連結を意味する) というばかげた「ハッシュ」関数がある場合、s1 != s2 および md5(s1) = = md5(s2) then silly_hash(s1) != silly_hash(s2) -- これは、md5 と silly_hash との二重衝突が発生しないことを意味します。

If you take 2 specific strings and compare, there's a 1 in 2^288 ~ 49732323640978664215538224814682084010045615079734771744046397689315949701253337‌​5533056 chance of both matching. Granted if you generate roughly about 2^144 ~ 22300745198530623141535718272648361505980416 strings together, there's a good chance that both hashes will match for one.

3,500,000の文字列でテストされ、一致しません..それで十分です(私が使用するデータベースには、入力レートで約10年以上の入力が必要です(4年で1.400.000レコード)-途中でidcheckを行いました(必要に応じて、どこかで1文字を変更できます))
そして、22300745198530623141535718272648361505980416?私はそれを数えることさえできません。
それが誰かを助けることを願っています。答えは「はいMD5(s1)+SHA1(s1)、ID として使用できます」です。

于 2013-09-12T09:59:04.180 に答える