使用 Rainbow 方法破解:获取 KeyError

Hack with Rainbow method: getting the KeyError

我正在尝试使用 Rainbow 方法执行一个 hack 项目。我有一个 csv 文件,其中包含使用 sha 256 的人名及其散列密码。我必须检索原始密码,这些密码是四位数字 (1000-9999)。这是 csv 文件:

danial,99b057c8e3461b97f8d6c461338cf664bc84706b9cc2812daaebf210ea1b9974
elham,85432a9890aa5071733459b423ab2aff9f085f56ddfdb26c8fae0c2a04dce84c

这是我的代码:

import hashlib
import csv

def hash_password_hack(passwords, new_passwords):
    with open (r'C:\Users\sony\Desktop\Python with Jadi\final project\passwords.csv','r', encoding='utf-8') as f:
        reader=csv.reader(f)
        dict1={}
        for row in reader:
            dict1[row[1]]=row[0]
        dict2={}
        for i in range (1000,10000):
            hashed_password=hashlib.sha256(str(i).encode('utf-8'))
            dict2[hashed_password]=i
        for key in dict1:
            with open (r'C:\Users\sony\Desktop\Python with Jadi\final project\new_passwords.csv', 'w', newline='') as f1:
                writer=csv.writer(f1)
                password=dict2[key]
                name=dict1[key]
                writer.writerow([name,password])

当我运行以上代码时,出现如下错误:

KeyError: '99b057c8e3461b97f8d6c461338cf664bc84706b9cc2812daaebf210ea1b9974'

据我所知,当我尝试调用的词典没有该特定键时,会出现此错误。由于我已经对 10000 到 9999 之间的每个数字进行了哈希处理,因此 dict2 必须包含上述密钥。为什么会出现此错误,我该如何解决?

hashlib.sha256(str(i).encode('utf-8')) returns 一个 HASH 对象,而不是十六进制散列,所以你是按对象键入的。相反,您想使用 hexdigest() 方法来获取十六进制哈希,例如hashed_password = hashlib.sha256(str(i).encode('utf-8')).hexdigest().