Python随机生成带特殊字符的密码


Posted in Python onMarch 02, 2016

在日常运维中,如果涉及到用户管理,就一定会用到给用户设置密码的工作,其实吧,平时脑子里觉得设置个密码没什么,但要真让你随手敲一个12位带特殊字符的随机密码,也是很痛苦的事,如果让你敲10个这样的随机密码,我估计要人要疯了,所以这事不适合人干,但机器最做这个最拿手,今天我们就来学习一段python脚本,可以直接生成自己需要的密码,且密码长度,数字,字符个数随意你指定,废话不多说了,我们直接看代码:

#!/usr/bin/env python
import string
from itertools import chain
from random import choice, sample
def mkpasswd(length=12, digits=4, upper=3, lower=3):
lowercase = string.lowercase
uppercase = string.uppercase
salt = '!@#$%^&*()><?'
password = list(
chain(
(choice(uppercase) for _ in range(upper)),
(choice(lowercase) for _ in range(lower)),
(choice(string.digits) for _ in range(digits)),
(choice(salt) for _ in range((length - digits - upper - lower)))
)
)
return "".join(sample(password, len(password)))
if __name__ == '__main__':
print mkpasswd()
#!/usr/bin/env python
import string
from itertools import chain
from random import choice, sample
def mkpasswd(length=12, digits=4, upper=3, lower=3):
lowercase = string.lowercase
uppercase = string.uppercase
salt = '!@#$%^&*()><?'
password = list(
chain(
(choice(uppercase) for _ in range(upper)),
(choice(lowercase) for _ in range(lower)),
(choice(string.digits) for _ in range(digits)),
(choice(salt) for _ in range((length - digits - upper - lower)))
)
)
return "".join(sample(password, len(password)))
if __name__ == '__main__':
print mkpasswd()

脚本逐行解释,最开始几行导入了需要的模块,接下来定义一个mkpasswd的函数,函数的参数可以设置密码长度,数字、大写和小写字符的个数,接下来是函数主题部分:

利用string模块的属性生成大小写字符串,salt是特殊字符集(支持自己添加),我们重点说password的生成,它首先是一个列表,因为调用了list()工厂函数,chain()函数的功能是将一组迭代器对象连接起来,chain()里有三个生成器表达式,每个表达式调用for循环,然后随机选择指定个数的字符,可能大家有看到for循环中有一个_(下划线),这个下划线有什么作用呢?我就不卖关子了,其实它啥作用也没有,我自己理解为用不到的变量,这种写法大家以后也可以用,比如你在循环的时候用不到这个变量,就可用用_(下划线)来表示。

函数最后是return连接后的字符串,sample()函数是从随机样本中取出自己指定的样本个数,需要两个参数,一个是样本,一个是取多少,取的过程是随机的,其实在这个脚本中这个函数没有发挥它完全的功能,因为生成的password就是12位的,然后在取出12位,不存在从大样本中取出小样本的工作,但起到了随机的功能,所以生成的密码是字符都是随机的。

关于Python随机生成带特殊字符的密码就给大家介绍到这里,希望对大家有所帮助!

Python 相关文章推荐
Python实现微信公众平台自定义菜单实例
Mar 20 Python
python编程开发之textwrap文本样式处理技巧
Nov 13 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
Jan 22 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
Pandas实现一列数据分隔为两列
May 18 Python
Python bisect模块原理及常见实例
Jun 17 Python
python中count函数知识点浅析
Dec 17 Python
Python关于OS文件目录处理的实例分享
May 23 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 #Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 #Python
设计模式中的原型模式在Python程序中的应用示例
Mar 02 #Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 #Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
Mar 02 #Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 #Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 #Python
You might like
php和javascript之间变量的传递实现代码
2012/12/19 PHP
基于header的一些常用指令详解
2013/06/06 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
node.js中的fs.appendFileSync方法使用说明
2014/12/17 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
vue配置多页面的实现方法
2018/05/22 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
从零学Python之入门(三)序列
2014/05/25 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
历史学专业推荐信
2013/11/06 职场文书
历史专业个人求职信分享
2013/12/20 职场文书
党员个人思想汇报
2013/12/28 职场文书
玄武湖导游词
2015/02/05 职场文书
感动中国何玥观后感
2015/06/02 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
你真的会用Mysql的explain吗
2022/03/31 MySQL
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers