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 中,但我更感兴趣的是使用它作为唯一 ID 的原理我可以说在 1,000,000 个生成的字符串中我没有发现任何冲突

MD5(String)+SHA1(String) 生成一个 72 个字符的字符串作为 uniqueid?

请记住,字符串在两个函数中都是相同的,并且长度为 300-350 个字符

或简单的问题

如果 SHA1 碰撞,相同字符串的 MD5 是否也会发生碰撞?或相反亦然?我不是数学天才,但我想碰撞因素很低..

我不能在这里使用基于时间戳的唯一 ID。

感谢您的时间。

4

1 回答 1

0

从其他论坛回答我自己的问题引用

如果我有两个不同的随机字符串 (s1, s2) (s1 != s2),您想知道 md5(s1) == md5(s2) AND sha1( s1) == sha1(s2)。

那么,首先对于两个特定的随机选择的字符串,md5(s1) == md5(s2) 的概率是多少?回答它的 1/2^128,因为第一个散列是一些 128 位字符串,第二个散列等于第二个散列的机会是 2^128 中的 1 或大约 2.9 x 10^-37 %。

同样,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 和一个新的散列函数,它只是 MD5 应用于自身 100 次,我们会发现只要 md5(s1) == md5(s2),我们也会有md5^100(s1) == md5^100(s2),因此两者碰撞的概率与发生一次碰撞的概率相同。

同样,如果我们有一个愚蠢的“哈希”函数,它只是 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 回答