Python 生成与给定字符串具有相同SHA1哈希的初始5个字符的字符串

Python 生成与给定字符串具有相同SHA1哈希的初始5个字符的字符串,python,sha1,Python,Sha1,我有一个给定的字符串,比如'test123' 我使用计算字符串的sha1哈希值,并取前5个字符: sha1(teststring.encode("utf-8")).hexdigest()[:5] 现在我想生成一个随机字符串,它具有相同的前5个sha1哈希字符 ''.join(random.choice(string.ascii_letters + string.digits + string.punctuation) for _ in range(16)) 我有一个有效的

我有一个给定的字符串,比如'test123' 我使用计算字符串的sha1哈希值,并取前5个字符:

sha1(teststring.encode("utf-8")).hexdigest()[:5]
现在我想生成一个随机字符串,它具有相同的前5个sha1哈希字符

''.join(random.choice(string.ascii_letters + string.digits + string.punctuation) for _ in range(16))
我有一个有效的解决方案,就是生成随机字符串并对它们进行散列,直到找到匹配的字符串


有没有更快的方法来实现这一点?

不,除了暴力之外,没有别的方法

SHA-1是一个加密哈希函数,您的问题与查找冲突非常接近


找到一种比暴力更快的方法将挫败SHA-1的目的。看看wikipedia的文章,它有很好的文档记录。

认为这个相关的问题会帮助你:应该比重复调用random.choice快一点。
hexdigest()
没有给你位,它给你一个字符串,其中每个字母代表一个十六进制值(“0”到“F”表示数字0到15)。如果你把前五个字母切掉,你现在有五个字母,代表20位。感谢你指出这一点,我更新了问题你可以利用这样一个事实,对字符串的一个小小的更改将导致一个完全不同的散列。因此,您不需要每次都创建一个新的随机字符串。