Last active
March 25, 2018 14:04
-
-
Save dizcza/42c78585d0c996de0054e8c8a9c84441 to your computer and use it in GitHub Desktop.
20k most probably used WPA passwords of digits of length 8+2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from datetime import date | |
from dateutil.rrule import rrule, DAILY | |
import itertools | |
masks = ( | |
# same | |
'aaaaaaaa', | |
'aaaaaaaaa', | |
'aaaaaaaaaa', | |
# pairs | |
'aaaabbbb', | |
'aabbccdd', | |
'aaabbbccc', | |
'aaaaabbbbb', | |
'aabbccddee', | |
# central mirror | |
'abcddcba', | |
'abcdeedcba', | |
# repeat | |
'abababab', | |
'ababababa', | |
'ababababab', | |
'abcabcabc', | |
'abcdabcd', | |
'abcdeabcde' | |
) | |
def count_digits(digits_generator): | |
def decorated(*args, **kwargs): | |
digits = digits_generator(*args, **kwargs) | |
print("{}: {} digits".format(digits_generator.__name__, len(digits))) | |
return digits | |
return decorated | |
@count_digits | |
def birthdays(flashback_years=100, date_fmt=("%m%d%Y", "%d%m%Y", "%Y%m%d", "%Y%d%m")): | |
end_day = date.today() | |
start_day = date(end_day.year - flashback_years, end_day.month, end_day.day) | |
days = set([]) | |
for date_formatted in date_fmt: | |
for dt in rrule(DAILY, dtstart=start_day, until=end_day): | |
days.add(dt.strftime(date_formatted)) | |
return sorted(days) | |
@count_digits | |
def create_digits_mask(alphabet_size_max=5): | |
digits_unique = tuple(range(10)) | |
digits = [] | |
def convert(pattern, alphabet, code): | |
for (char_from, digit_to) in zip(alphabet, code): | |
pattern = pattern.replace(char_from, str(digit_to)) | |
return pattern | |
for pattern in masks: | |
alphabet = sorted(set(pattern)) | |
alphabet_size = len(alphabet) | |
if len(alphabet) > alphabet_size_max: | |
# only ascending order: 11223344 | |
for start in range(11-alphabet_size): | |
code = range(start, start+alphabet_size) | |
sample = convert(pattern, alphabet, code) | |
digits.append(sample) | |
else: | |
for digits_perm in itertools.permutations(digits_unique, alphabet_size): | |
sample = convert(pattern, alphabet, code=digits_perm) | |
digits.append(sample) | |
assert len(set(digits)) == len(digits) | |
return digits | |
@count_digits | |
def create_digits_cycle(password_length_max=10): | |
digits = [] | |
for start in range(10): | |
for password_length in range(8, password_length_max+1): | |
right = [str(d % 10) for d in range(start, start+password_length)] | |
left = right[::-1] | |
for sample in (right, left): | |
sample = ''.join(sample) | |
digits.append(sample) | |
assert len(set(digits)) == len(digits) | |
return digits | |
if __name__ == '__main__': | |
digits = [] | |
digits.extend(create_digits_mask(alphabet_size_max=3)) | |
digits.extend(create_digits_cycle(password_length_max=10)) | |
digits.extend(birthdays(flashback_years=50, date_fmt=("%d%m%Y",))) | |
with open('digits8.txt', 'w') as f: | |
f.write('\n'.join(digits)) | |
print("Wrote total {} digits".format(len(digits))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If you live in the USA, change the birthday format to
"%m%d%Y"
Examples are here.