我想创建一个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。如果另一种语言更容易/更好地使用该语言。
答案 0 :(得分:1)
如果我正确理解了您的问题,您希望使用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')