python - 范围内的整数是否存在 md5 冲突 (1,1000000000)

标签 python hash md5 uuid guid

我想使用 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/

相关文章:

hash - 在 GetHashCode() 中使用 F# 的哈希函数邪恶?

mysql - 如何存储密码盐

java - 遍历 zip 文件 java 中的所有目录

iphone - 生成 MD5 散列的方法的奇怪行为 - 返回相同的散列结果

java - Go SHA-256 哈希不同于 Java SHA-256 哈希

java - NullPointerExcetion native 方法访问器...哈希词问题

使用 scipy.io 将 python pandas 数据框转换为 matlab 结构

python - 通过 pyodbc 更新 Oracle DB 挂起

python - 使用 PIL 通过 Python 加载、旋转和替换图像

python - 如何将值从一个列表转移到另一个列表?