上等兵
- 注册时间
- 2023-9-8
- 金币
- 88 个
- 威望
- 0 个
- 荣誉
- 0 个
累计签到:8 天 连续签到:1 天 [LV.20]漫游旅程
|
本帖最后由 shvepwqp 于 2023-12-13 18:40 编辑
首发:https://blog.jiangqing.xyz/post/ ... 1-4babcffe1272.html[/url]
密码规则
长度为8位
每位都有可能是大小写、数字、特殊字符
每两位之间相邻不重复
需要解决的问题存储问题这种规则的密码生成并不复杂,难的是高达几十个T的存储,就算是生成了,高IO肯定也是个问题
配合hashcat的问题既然要实现无存储跑hashcat,那肯定是想到用掩码,但是掩码又不可能设计出每两位相邻不重复的规则
思路考虑用python配合hashcat,一边生成,一边输入到hashcat中
为了照顾每两位相邻不重复,解决这个问题,我们可以考虑使用一种更加高效的密码生成策略。具体来说,我们可以按照一定的顺序生成密码,确保每次生成的密码都是全新的,从而避免重复检查。
我们可以首先生成所有的2位密码,然后将这些2位密码组合起来,形成8位密码。在这个过程中,我们需要确保相邻的2位密码不相同。这样,我们就可以生成所有满足你要求的8位密码,而且不会有重复。
python:
import itertoolsimport subprocessfrom 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 == 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()
|
|