我想使用 1 到 999999999 之间的预先存在的唯一标识符的 md5 散列在 python 中生成一个 uuid
很明显,对于如此小的数字,没有任何担心......但这让我思考,我们是否知 Prop 有相同 md5 哈希值的最小两个整数?
最佳答案
我测试过,答案是否定的。
使用 set()
计数会在我的 64GB 内存盒上触发 MemoryError
,所以我将 hexlify 哈希写入磁盘:
import hashlib
from multiprocessing import Pool
import os
def f(args):
s, e = args
l = []
for i in xrange(s, e):
h = hashlib.md5(str(i)).hexdigest()
l.append(h)
l.sort()
fn = '/data/tmp/%s_%s' % (s, e)
with open(fn, 'w') as f:
for h in l:
f.write('%s\n' % (h,))
def main():
def gen():
end = 1000000000
step = 5000000
s = 0
while s < end:
yield s, s+step
s += step
pool = Pool(processes=16)
res = pool.imap_unordered(f, gen())
list(res)
然后用 sort(1)
计数:
sort -mu /data/tmp/* | wc -l
产量:
1000000000
请注意,我将整数编码为 ASCII 字符串。
关于python - 范围内的整数是否存在 md5 冲突 (1,1000000000),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47280537/