Skip to content

Instantly share code, notes, and snippets.

@dizcza
Last active March 25, 2018 14:04
Show Gist options
  • Save dizcza/42c78585d0c996de0054e8c8a9c84441 to your computer and use it in GitHub Desktop.
Save dizcza/42c78585d0c996de0054e8c8a9c84441 to your computer and use it in GitHub Desktop.
20k most probably used WPA passwords of digits of length 8+2
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)))
@dizcza
Copy link
Author

dizcza commented Mar 25, 2018

create_digits_mask: 1959 digits
create_digits_cycle: 60 digits
birthdays: 18263 digits
Wrote total 20282 digits

If you live in the USA, change the birthday format to "%m%d%Y"

Examples are here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment