使用散列时发现 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,20200128
或 bucky,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
我正在编写一个基本代码,使用 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,20200128
或 bucky,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