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采用django框架实现支付宝即时到帐接口
May 17 Python
一张图带我们入门Python基础教程
Feb 05 Python
python+pyqt实现右下角弹出框
Oct 26 Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
Python3 Post登录并且保存cookie登录其他页面的方法
Dec 28 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
Python整数对象实现原理详解
Jul 01 Python
PyTorch中的padding(边缘填充)操作方式
Jan 03 Python
python单例模式的应用场景实例讲解
Feb 24 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 Python
如何理解python接口自动化之logging日志模块
Jun 15 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
vue.js中父组件调用子组件的内部方法示例
2017/10/22 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
详解vuex commit保存数据技巧
2018/12/25 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
python通过opencv实现批量剪切图片
2017/11/13 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
如何通过Python实现标签云算法
2019/07/02 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
自主招生自荐书
2013/11/29 职场文书
机电专业个人求职信范文
2013/12/30 职场文书
团队队名口号大全
2014/06/06 职场文书
环境保护标语
2014/06/20 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
Java数组详细介绍及相关工具类
2022/04/14 Java/Android
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle