-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathShootPassword.py
204 lines (176 loc) · 9.09 KB
/
ShootPassword.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
import itertools
import json
import os
# Автор проекта: Емельянов Григорий Андреевич @emelyagr https://github.com/emelyagr
# Author of the project: Emelyanov Grigory Andreevich @emelyagr https://github.com/emelyagr -->
# Класс для хранения данных пользователя
class UserData:
def __init__(self, social_id, last_name, first_name, middle_name, address, birth_year, hobbies):
self.social_id = social_id
self.last_name = last_name
self.first_name = first_name
self.middle_name = middle_name
self.address = address
self.birth_year = birth_year
self.hobbies = hobbies
# Класс для генерации электронных почт и паролей и работы с историей
class EmailPasswordGenerator:
def __init__(self):
self.history = []
self.history_id = 0
self.history_file = "history.json" # Путь к файлу истории
self.load_history()
# Загрузка истории из файла
def load_history(self):
if os.path.exists(self.history_file):
with open(self.history_file, "r", encoding="utf-8") as file:
self.history = json.load(file)
if self.history:
self.history_id = max(record['id'] for record in self.history)
else:
self.save_history()
# Сохранение истории в файл
def save_history(self):
with open(self.history_file, "w", encoding="utf-8") as file:
json.dump(self.history, file, ensure_ascii=False, indent=4)
# Генерация электронных почт на основе данных пользователя
def generate_emails(self, user_data):
domains = ["gmail.com", "yahoo.com", "outlook.com", "mail.ru", "yandex.ru", "rambler.ru", "vk.com"]
parts = [
user_data.first_name,
user_data.middle_name,
user_data.last_name,
str(user_data.birth_year)
]
emails = set()
# Генерация уникальных комбинаций для адресов электронной почты
for comb in itertools.permutations(parts, 2):
for domain in domains:
email = f"{''.join(comb)}@{domain}"
emails.add(email)
if len(emails) >= 100:
return list(emails)
return list(emails)
# Генерация паролей на основе данных пользователя
def generate_passwords(self, user_data):
# Удаление запятых и пробелов из вводимых данных и объединение их в одну строку без пробелов
clean_parts = [
user_data.social_id.replace(',', '').replace(' ', ''),
user_data.last_name.replace(',', '').replace(' ', ''),
user_data.first_name.replace(',', '').replace(' ', ''),
user_data.middle_name.replace(',', '').replace(' ', ''),
user_data.address.replace(',', '').replace(' ', ''),
str(user_data.birth_year).replace(',', '').replace(' ', ''),
] + [hobby.replace(',', '').replace(' ', '') for hobby in user_data.hobbies]
passwords = set()
# Генерация уникальных комбинаций для паролей
for comb in itertools.permutations(clean_parts, 2):
password_base = ''.join(comb)
# Добавление символов, цифр и вариаций регистра
variations = [
password_base,
password_base[::-1],
password_base.upper(),
password_base.lower(),
password_base.capitalize(),
password_base + "123",
password_base + "!",
"!" + password_base,
password_base.replace('a', '@').replace('o', '0').replace('i', '1').replace('e', '3'),
password_base.capitalize() + "!",
password_base.upper() + "123",
"!" + password_base.lower(),
password_base.replace('a', '@').replace('o', '0') + "123",
password_base[::-1].replace('i', '1').replace('e', '3') + "!"
]
for variation in variations:
passwords.add(variation)
if len(passwords) >= 100:
return list(passwords)
return list(passwords)
# Сохранение запроса в историю
def save_to_history(self, user_data, emails, passwords):
self.history_id += 1
self.history.append({
'id': self.history_id,
'user_data': {
'social_id': user_data.social_id,
'last_name': user_data.last_name,
'first_name': user_data.first_name,
'middle_name': user_data.middle_name,
'address': user_data.address,
'birth_year': user_data.birth_year,
'hobbies': user_data.hobbies
},
'emails': emails,
'passwords': passwords
})
self.save_history()
# Возврат списка историй
def get_history(self):
return [(record['id'], record['user_data']['first_name'], record['user_data']['last_name']) for record in self.history]
# Получение истории по ID
def get_history_by_id(self, history_id):
for record in self.history:
if record['id'] == history_id:
return record
return None
# Генерация электронных почт и паролей и сохранение их в историю
def process_user_data(self, user_data):
emails = self.generate_emails(user_data)
passwords = self.generate_passwords(user_data)
self.save_to_history(user_data, emails, passwords)
return emails, passwords
# Автор проекта: Емельянов Григорий Андреевич @emelyagr https://github.com/emelyagr
# Author of the project: Emelyanov Grigory Andreevich @emelyagr https://github.com/emelyagr -->
def main():
generator = EmailPasswordGenerator()
while True:
print("Введите данные пользователя или 'history' для просмотра истории или 'exit' для выхода:")
command = input().strip()
if command == 'history':
history = generator.get_history()
print("История:")
for record in history:
print(f"ID: {record[0]}, Имя: {record[1]} {record[2]}")
print("Введите ID для просмотра деталей или 'back' для возврата:")
sub_command = input().strip()
if sub_command == 'back':
continue
else:
try:
history_id = int(sub_command)
record = generator.get_history_by_id(history_id)
if record:
print(f"Данные пользователя для ID {history_id}:")
print(f"Имя: {record['user_data']['first_name']} {record['user_data']['last_name']}")
print("Электронные почты:")
for email in record['emails']:
print(email)
print("\nПароли:")
for password in record['passwords']:
print(password)
else:
print("Неверный ID.")
except ValueError:
print("Неверный ввод.")
elif command == 'exit':
break
else:
social_id = input("Введите ID в соц. сетях: ")
last_name = input("Введите фамилию: ")
first_name = input("Введите имя: ")
middle_name = input("Введите отчество: ")
address = input("Введите адрес проживания: ")
birth_year = input("Введите год рождения: ")
hobbies = input("Введите хобби (через запятую): ").split(',')
user_data = UserData(social_id, last_name, first_name, middle_name, address, birth_year, hobbies)
emails, passwords = generator.process_user_data(user_data)
print("Сгенерированные электронные почты:")
for email in emails:
print(email)
print("\nСгенерированные пароли:")
for password in passwords:
print(password)
if __name__ == "__main__":
main()