我想创建一个python程序,它首先接受一个名为inputhash的输入(sha256hash)。然后取数字0到9和字母a到z(总共36个选项)并将它们重新排列在32个点中并将其保存到str变量中,让我们说它的randomstring。然后从0到99选择一个随机数(比如说它的名为correctnumber),并将该数字放在randomstring的末尾。最后它散列(sha256)randomstring,如果它与inputhash不匹配,它会重复该过程,直到它完成。最后它会打印变量correctnumber。你是如何创造这个的?
这是你sha256哈希的方式
import hashlib
var = 'password'
hashedWord = hashlib.sha256(var.encode('ascii')).hexdigest()
但我知道其他功能的想法。谢谢
这不是必须在PYTHON。如果另一种语言更容易/更好地使用该语言。
如果我正确理解了您的问题,您想要使用32个较低的字母数字字符加上一个或两个数字来强制使用SHA256哈希值。如果是这样,这段代码不太可能解决你的问题,(这几乎是不可能的,而python是这个任务的一个非常糟糕的选择),但它可能会给你一些想法。
您可以使用itertools.product()
创建所有可能的字符组合,并使用生成器生成它们,因此它不会对内存产生很大的影响。
def string_generator(size=32):
chars = string.ascii_lowercase + string.digits
for i in itertools.product(chars, repeat=size):
yield i
现在我们可以迭代该生成器中的项目,并为每个项目添加range(100)
中的数字以创建可能的匹配。如果可能匹配的哈希值等于输入哈希值,请恭喜您找到了正确的数字!
完整的代码:
import string
import itertools
import hashlib
def string_generator(size=32):
chars = string.ascii_lowercase + string.digits
for i in itertools.product(chars, repeat=size):
yield ''.join(i)
def bruteforce(hash):
possible_strings = string_generator()
for i in possible_strings:
for n in range(100):
s = i + str(n)
print('\r' + s, end=' ')
if hashlib.sha256(s.encode('ascii')).hexdigest() == hash:
print('\rHash found: ' + s)
return n
print('\nNot found.')
s = bruteforce('my hash')