Here is what the program does: We would like to generate passwords (or some other random string), but we want to be able to specify a template. For example, we may want to specify that each password is 7 lowercase characters. In this case we would use the template 'aaaaaaa'. Suppose we wanted a password that looks like a Victorian (Victoria, Australia) number plate, we would specify the template 'AAA-999', in other words, three random letters followed by a hyphen followed by three random digits. Finally, we may want to generate a simple password that is easy to remember by making it pronouncable - so we generate it using the following template: 'Cvcvc' The 'c' will be replaced by a consonant and the 'v' by a vowel, giving us something like, maybe, 'Gamir'.
Here is the program:
import string
import random
vowels_upper = 'AEIOU'
vowels_lower = 'aeiou'
consonants_upper = 'BCDFGHJKLMNPQRSTVWXYZ'
consonants_lower = 'bcdfghjklmnpqrstvwxyz'
alphanumeric = string.letters + string.digits
recognize = {
'A': string.ascii_uppercase, 'a': string.ascii_lowercase,
'C': consonants_upper, 'c': consonants_lower,
'V': vowels_upper, 'v': vowels_lower,
'd': string.digits, 'x': alphanumeric}
def create_password(template):
return ''.join([random.choice(recognize[ch])
if ch in recognize else ch for ch in template])
if __name__ == '__main__':
for i in range(5):
print create_password('AAA-ddd')
for i in range(5):
print create_password('Cvcvc')
When we run the above program, we get the following output:
MOI-138 KMQ-882 UCH-536 LBK-734 MGA-798 Wewof Roqug Colud Gokix Berid
That's quite a lot of power for what is essentially one line of code.
No comments:
Post a Comment