我试图从etc / shadow文件(它有43个用户/密码)中猜测密码。并给了我一些有关密码的提示:
所以我只是从一个由4个字符和2个数字组成的小组开始。但是要花很多时间:
import crypt
import string
import itertools
import datetime
dir = "shadow3"
file = open(dir, 'r').readlines() #Read all the 43 hashes
username = []
hashed = []
c = 0
cc = 0
for x in file: #Split the hash and the username
usr, hshd, wtf, iss, this, thing, here, doing, example = x.split(':')
username.append(usr)
hashed.append(hshd)
#GRUPO1 4 caracteres 2 numeros
letters = string.ascii_lowercase
digits = string.digits
grupo1=[]
group1=itertools.product(letters,repeat=2)
group1b=itertools.product(digits,repeat=2)
for x in itertools.product(group1,group1b): #Join the possible iterations
string=''.join([''.join(k) for k in x])
grupo1.append(string)
print(len(grupo1))
for y in grupo1:#Get the one of the iterations and try it
prueba=y
for x in hashed: #Verify if that iteration is the password to any of the 43 users
rehashed = crypt.crypt(prueba, x)
if rehashed == x: #Password is found
print('La contraseña del usuario ' + username[c] + ' es ' + prueba)
cc = 1
c = c + 1
if cc == 0: #after all iterations password is not found
print('Lo sentimos "' + prueba + '" no es la contraseña de ningun usuario')
如何提高效率?我有一个GTX 1070,它可以用于任何类型的GPU处理。
答案 0 :(得分:1)
我相信您的代码有错误。您的问题可以重新建模,这样可以更快:
根据您的条件生成所有可能的密码组合 -长度介于4到8个字符之间 -只能有2个数字,并且只能在末尾 -仅在开头使用大写字母
在每个组合上生成crypt()
比较密码与密码值。
答案 1 :(得分:0)
幸运的是,Python附带了一个探查器,以帮助解决此类问题。查看cProfile文档。