【问题标题】:Generate string with same initial 5 characters of SHA1 hash with given string使用给定的字符串生成具有相同 SHA1 哈希的初始 5 个字符的字符串
【发布时间】: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 位。
  • 您可以利用这样一个事实,即对字符串的微小更改将导致完全不同的哈希值。所以你不需要每次都创建一个新的随机字符串。

标签: python sha1


【解决方案1】:

不,除了蛮力之外什么都没有。

SHA-1 是一种加密哈希函数,您的问题非常接近于寻找冲突的问题。

找到比蛮力更快的方法会破坏 SHA-1 的目的。看看维基百科的文章,它有很好的记录。

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多