python生成10个随机密码_python生成随机密码

很早之前写过一个篇 利用pwgen、mkpasswd、tr自动更改密码,后来又狗尾了篇用Linux命令行生成随机密码的十种方法 。前面至少还算是个系统功能,后面越来越写越成烂大街的东西了。即然再烂了,不怕再加一个python版的生成随机密码的篇幅。

一、版本1

先来个详述版的,这里相当于主机讲了下random模块和string模块里一些方法,代码如下:

#! /usr/bin/env python

# -*- coding: utf-8 -*-

#@author 运维之路(www.361way.com)

import string

from os import urandom

from random import choice

'''

Linux正则命名参考:http://vbird.dic.ksu.edu.tw/linux_basic/0330regularex.php#lang

[:alnum:]代表英文大小写字节及数字,亦即 0-9, A-Z, a-z

[:alpha:]代表任何英文大小写字节,亦即 A-Z, a-z

[:blank:]代表空白键与 [Tab] 按键两者

[:cntrl:]代表键盘上面的控制按键,亦即包括 CR, LF, Tab, Del.. 等等

[:digit:]代表数字而已,亦即 0-9

[:graph:]除了空白字节 (空白键与 [Tab] 按键) 外的其他所有按键

[:lower:]代表小写字节,亦即 a-z

[:print:]代表任何可以被列印出来的字节

[:punct:]代表标点符号 (punctuation symbol),亦即:" ' ? ! ; : # $...

[:upper:]代表大写字节,亦即 A-Z

[:space:]任何会产生空白的字节,包括空白键, [Tab], CR 等等

[:xdigit:]代表 16 进位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字节

Python自带常量(本例中改用这个,不用手工定义了)

string.digits #十进制数字:0123456789

string.octdigits #八进制数字:01234567

string.hexdigits #十六进制数字:0123456789abcdefABCDEF

string.ascii_lowercase #小写字母(ASCII):abcdefghijklmnopqrstuvwxyz

string.ascii_uppercase #大写字母(ASCII):ABCDEFGHIJKLMNOPQRSTUVWXYZ

string.ascii_letters #字母:(ASCII)abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

string.punctuation #标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

以下的不用,有locale问题

string.lowercase #abcdefghijklmnopqrstuvwxyz

string.uppercase #ABCDEFGHIJKLMNOPQRSTUVWXYZ

string.letters #ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

以下的不能用

string.whitespace #On most systems this includes the characters space, tab, linefeed, return, formfeed, and vertical tab.

string.printable #digits, letters, punctuation, and whitespace

'''

#请在此设置您要生成的密码需求

passwd_length = 20 #密码长度

passwd_count = 100 #密码个数

passwd_seed = string.digits + string.ascii_letters + string.punctuation #密码种子

#passwd_seed = string.digits

#passwd_seed = string.digits + string.ascii_letters

def generate_passwd():

'''Function to generate a password'''

passwd = []

while (len(passwd) < passwd_length):

passwd.append(choice(passwd_seed))

return ''.join(passwd)

def print_string_constants():

'''Test Case'''

print string.digits

print string.octdigits

print string.hexdigits

print string.ascii_lowercase

print string.ascii_uppercase

print string.ascii_letters

print string.punctuation

print string.lowercase

print string.uppercase

print string.letters

print (string.printable + "ooo")

print string.whitespace

print '\n\n'

if __name__ == '__main__':

for i in range(0, passwd_count):

print generate_passwd()

这个版本不要看着长,其实很多代码没用,为了便于理解加上去上的,真正用的只是上面的import部分+ gen_pass函数部分 + main函数 。

二、版本2

#!/usr/bin/env python

# -*- coding=utf-8 -*-

import random, string#导入random和string模块

def GenPassword(length):

#随机出数字的个数

numOfNum = random.randint(1,length-1)

numOfLetter = length - numOfNum

#选中numOfNum个数字

slcNum = [random.choice(string.digits) for i in range(numOfNum)]

#选中numOfLetter个字母

slcLetter = [random.choice(string.ascii_letters) for i in range(numOfLetter)]

#打乱组合

slcChar = slcNum + slcLetter

random.shuffle(slcChar)

#生成随机密码

getPwd = ''.join([i for i in slcChar])

return getPwd

if __name__ == '__main__':

print GenPassword(6)

该版本代码略多,只不过其中指定必须有数字,必须有字母,当然再改下,你还可以指定必须有特殊符号。

三、版本3

from random import randrange, sample

#定义列表

password_list = ['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a',

'0','1','2','3','4','5','6','7','8','9',

'!','@','#','$','%','^','&','*','(',')','_','+','-','=',

'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'

]

leng=15 #定义长度

password = "".join(sample(password_list, leng)).replace(' ', '')

print(password)

这里只是给了一个全示例,其实真实使用中时,如果上面的sting码表如果都要的话,直接使用上面的sting里的方法更好,不过往往为了使密码便于区分,会将I、l(小写L)、1(数字1)、O与0(数字零)等去掉。这样使用版本3就比较不错。

四、版本4

#-*- coding:utf-8 -*-

'''

简短地生成随机密码,包括大小写字母、数字,可以指定密码长度

'''

#生成随机密码

from random import choice

import string

#python3中为string.ascii_letters,而python2下则可以使用string.letters和string.ascii_letters

def GenPassword(length=8,chars=string.ascii_letters+string.digits):

return ''.join([choice(chars) for i in range(length)])

if __name__=="__main__":

#生成10个随机密码

for i in range(10):

#密码的长度为8

print(GenPassword(8))

代码简少,是版本1的一个更简化版本的变种,来自于python cookbook上的方法。

你可能感兴趣的:(python生成10个随机密码)