【发布时间】:2020-10-24 15:12:56
【问题描述】:
我有一个给定的字符串,比如说'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))
我有一个可行的解决方案,我只是生成随机字符串并将它们散列,直到找到匹配的字符串。
有没有更快的方法来实现这一点?
【问题讨论】:
-
认为这个相关问题会对你有所帮助:stackoverflow.com/questions/3859100/convert-sha1-back-to-string
-
random.choices 应该比重复调用 random.choice 快一点。
-
hexdigest()不给你位,它给你一个字符串,其中每个字母代表一个十六进制值(“0”到“F”表示数字 0 到 15)。因此,如果你切掉前五个,你现在有五个字母,代表 20 位。 -
您可以利用这样一个事实,即对字符串的微小更改将导致完全不同的哈希值。所以你不需要每次都创建一个新的随机字符串。