Python随机字符串Sha256 Hasher

时间:2018-02-04 22:37:41

标签: python random sha256

我想创建一个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。如果另一种语言更容易/更好地使用该语言。

1 个答案:

答案 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')