Welcome, guest | Sign In | My Account | Store | Cart

Password will be generated in the form 'word'+digits+'word' eg.,nice137pace instead of a difficult-to-remember - K8Yn9muL

Python, 57 lines
 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
## Generate a human readable 'random' password
## password  will be generated in the form 'word'+digits+'word' 
## eg.,nice137pass
## parameters: number of 'characters' , number of 'digits'
## Pradeep Kishore Gowda <pradeep at btbytes.com >
## License : GPL 
## Date : 2005.April.15
## Revision 1.2 
## ChangeLog: 
## 1.1 - fixed typos 
## 1.2 - renamed functions _apart & _npart to a_part & n_part as zope does not allow functions to 
## start with _

def nicepass(alpha=6,numeric=2):
    """
    returns a human-readble password (say rol86din instead of 
    a difficult to remember K8Yn9muL ) 
    """
    import string
    import random
    vowels = ['a','e','i','o','u']
    consonants = [a for a in string.ascii_lowercase if a not in vowels]
    digits = string.digits
    
    ####utility functions
    def a_part(slen):
        ret = ''
        for i in range(slen):			
            if i%2 ==0:
                randid = random.randint(0,20) #number of consonants
                ret += consonants[randid]
            else:
                randid = random.randint(0,4) #number of vowels
                ret += vowels[randid]
        return ret
    
    def n_part(slen):
        ret = ''
        for i in range(slen):
            randid = random.randint(0,9) #number of digits
            ret += digits[randid]
        return ret
        
    #### 	
    fpl = alpha/2		
    if alpha % 2 :
        fpl = int(alpha/2) + 1 					
    lpl = alpha - fpl	
    
    start = a_part(fpl)
    mid = n_part(numeric)
    end = a_part(lpl)
    
    return "%s%s%s" % (start,mid,end)
    
if __name__ == "__main__":
    print nicepass(6,2)      

Other receipies like: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/59873 generate a strong albeit difficult to remember password.

This script will be useful in cases where you are sending auto-generated passwords to registrants(say) over email. This password is difficult than a dictionary word, at the same time easy enough to 'read' and remember by the recipient.

2 comments

hemanth sethuram 19 years ago  # | flag

Nice sounding algorithm. It's a nice recipe. Your algorithm for getting nice sounding words with random characters is to alternate between consonants and vowels (all the if i%2 == 0 statements). With this, you cannot get your example password 'nice137pass' but something like 'nice137pace'. You can also add 'y' to your vowel list to get some more pronounceable phrases.

--Hemanth P.S.

Lorenzo Bolognini 18 years, 12 months ago  # | flag