密码规则
长度为8位
每位都有可能是大小写、数字、特殊字符
每两位之间相邻不重复
需要解决的问题
存储问题
这种规则的密码生成并不复杂,难的是高达几十个T的存储,就算是生成了,高IO肯定也是个问题
配合hashcat的问题
既然要实现无存储跑hashcat,那肯定是想到用掩码,但是掩码又不可能设计出每两位相邻不重复的规则
思路
考虑用python配合hashcat,一边生成,一边输入到hashcat中
为了照顾每两位相邻不重复,解决这个问题,我们可以考虑使用一种更加高效的密码生成策略。具体来说,我们可以按照一定的顺序生成密码,确保每次生成的密码都是全新的,从而避免重复检查。
我们可以首先生成所有的2位密码,然后将这些2位密码组合起来,形成8位密码。在这个过程中,我们需要确保相邻的2位密码不相同。这样,我们就可以生成所有满足你要求的8位密码,而且不会有重复。
python:
import itertools
import subprocess
from multiprocessing import Process, Queue
# 定义可能的字符集
charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()'
# 生成所有可能的2位密码
two_char_passwords = list(itertools.product(charset, repeat=2))
# 检查相邻的2位密码是否相同
def check_repetition(password):
for i in range(len(password)-1):
if password[i] == password[i+1]:
return False
return True
# 密码生成函数
def generate_passwords(queue):
# 生成所有可能的8位密码
for password in itertools.product(two_char_passwords, repeat=4):
if check_repetition(password):
password_str = ''.join([''.join(two_char) for two_char in password])
queue.put(password_str)
# Hashcat调用函数
def run_hashcat(queue):
hashcat_process = subprocess.Popen(['/hashcat/hashcat-6.2.6/hashcat.bin', '-w', '4','-a','0', '-m', '22000', '-o', './passwd', './1.ht220000'], stdin=subprocess.PIPE)
while True:
password_str = queue.get()
hashcat_process.stdin.write((password_str + '\n').encode())
hashcat_process.stdin.flush()
# 创建队列和进程
queue = Queue()
producer = Process(target=generate_passwords, args=(queue,))
consumer = Process(target=run_hashcat, args=(queue,))
# 启动进程
producer.start()
consumer.start()
# 等待进程结束
producer.join()
consumer.join()
欢迎指出任何有错误或不够清晰的表达,可以在下面评论区评论。