使用散列时发现 x 的代码是否正确?

Is the code correct to discover x while using the hash?

我正在编写一个基本代码,使用 python 来查找给定散列的 x 是什么。但是,当我 运行 它时它没有打印出 x 我认为这是因为在 000000-1000000 范围内没有数字与字符串的其余部分一起获取哈希。我已经给出了一半的字符串和散列,并且 x 应该只包含 整数 并且必须 至少 6 个字符 长。

import hashlib
for x in range(000000, 1000000):
    line = "user,{x},200981".format(x=x)
    num = hashlib.sha256(line.encode()).hexdigest()
    if (num == "ba520f71e8f8f640423b1f1d4ecea68c81e6ec8c492c2273da348a48e4f407fa"):
        print(x)
        break

是我将 x 设置为字符串的方式不正确还是我的结果是 num?我是 python 的新手,所以我还在不断学习!

您要查找的x显然不在000000 - 1000000范围内。

18273349.

>>> from itertools import count
>>> for x in count():
...   line = "user,{x},200981".format(x=x)
...   num = hashlib.sha256(line.encode()).hexdigest()
...   if (num == "ba520f71e8f8f640423b1f1d4ecea68c81e6ec8c492c2273da348a48e4f407fa"):
...      print(x)
...      break
... 
18273349

在这里,我没有使用固定范围,而是使用 itertools.count 计数到无穷大,直到找到 x

>>> line = "user,{x},200981".format(x=18273349)
>>> num = hashlib.sha256(line.encode()).hexdigest()
>>> num
'ba520f71e8f8f640423b1f1d4ecea68c81e6ec8c492c2273da348a48e4f407fa'

一个问题是,当您用 6 位数字书写数字时,python 并不重要:0、00、000、0000、00000 和 000000 都是相同的:0。当您格式化字符串时,这正是 Python 将插入的内容:

>>> 000000
0
>>> format(000000, '')
'0'

因此,您的格式化字符串将类似于 bucky,743,20200128bucky,6913,20200128,如您所见,中间没有 6 位数字 /格式化数字。因此,要查找的数字介于 0 和 99999 之间,您将永远找不到它。

在这种情况下,您可能希望在格式化时将数字 zero-pad 设为 6 位数字:

line = "bucky,{x:06},20200128".format(x=x)

不过也有可能

你误读/误解了问题本身:

and x is supposedly only containing integers and must be at least 6 characters long.

我不知道这是提出的问题还是你对它的改写,但对此的解释是 x 至少 6 位数的数字(通常不包括任何前导零)也就是您不是在寻找填充到 6 的 1-6 位数字,而是在寻找高于 10[=32= 的数字]6