话不多说,直接上代码(注意必须是python3 ,因为有两个方法在python2和3中的写法是不同的,如果用python2,则需要修改maketrans和translate)
# -*- coding: utf-8 -*-
# 本程序用于生成指定长度,包含指定字符,排除指定字符,必定包含数字大小写的随机密码
# 参数介绍:
# del_string:不想在密码中出现的字符,主要是易混淆的字符,比如0O1l
# add_string:想要额外添加的字符,主要是特殊字符,因为大小写字母和数字已经默认包含了
# 命令行参数:格式是"python3 main.py y 16",简单使用"python3 main.py"
# y代表的是,是否添加额外的字符,默认是添加的,所以这个参数可以不用,
# 需要注意的是,如果使用了y以外的参数,比如abcde,那么统统都认为不想添加额外字符,因为程序只判断是不是等于y
# 16表示密码长度,默认长度就是16,所以这个参数也可以不加,
# 注意:
# 1. 有些网站限定密码最长16位,所以默认就设定了16,如果习惯更长的密码,可以在执行时候指定参数,也可以自己在代码里改掉参数
# 代码中修改,只需要把get_key函数中的"n=16"改成需要的长度即可
# 2. 有些网站密码不允许包含特殊字符,所以遇到这种情况的时候,加个n参数,去掉额外字符就行,例如"python3 main.py n"
# 或者嫌麻烦,直接使参数add_string=''就可以了
# 3. 程序里的参数是根据位置来判断的,而且是从左到右的,也就是说,如果要加密码长度参数,那你前面就得加y参数,不然就要报错
import random
import string
import re
import sys
del_string = '0oOilL1' # 不想在密码中出现的字符
add_string = '=+#@&' # 额外添加的字符
string_lib = string.ascii_letters + string.digits # 小写字母+大写字母+数字
def get_key(j='y', n=16):
del_string_temp = del_string
string_lib_temp = string_lib
if j == 'y': # 添加额外字符
string_lib_temp += add_string
string_lib_temp = string_lib_temp.translate(str.maketrans('', '', del_string_temp)) # 删去不想要的字符
while 1: # 判断是否包含数字,大小写字母,额外添加的字符
key = random.sample(string_lib_temp, n) # 生成随机密码
key = "".join(key)
if bool(re.search(r'\d', key)) \
and bool(re.search('[a-z]', key)) \
and bool(re.search('[A-Z]', key)):
if j == 'y' and add_string != '':
if bool(re.search('[' + add_string + ']', key)):
return key
else:
return key
if __name__ == '__main__':
if len(sys.argv) == 3:
key = get_key(j=sys.argv[1], n=int(sys.argv[2]))
elif len(sys.argv) == 2:
key = get_key(j=sys.argv[1])
else:
key = get_key()
print("length:", len(key))
print(key)
大多数的密码管理软件都支持排除混淆字母,比如0O这类,但是它不支持自定义,比如g9q我也容易混淆,但无法自定义在密码中排除,其中keepass具备这个功能,但我不喜欢这个软件,自动填充功能太拉胯,所以仿照keepass的密码生成器写了这个代码,主要是希望它具备下面这几个功能
这只是个python脚本,如果需要密码的时候,去打开路径,然后再执行,那么很明显效率会非常低,每个人有自己顺手的自定义操作方式,我这里就只讲下我的方法
我用的搜狗输入法,在搜狗输入法中有自定义短语的功能,就是固定的按键,直接出现固定内容,一般流行的输入法都会有类似功能的,那么我们就可以将固定的代码加入到自定义短语中,在需要生成密码的时候,打开命令行,直接几个按键就执行了,示例如下:
我在搜狗输入法的自定义短语中定义了,在第二候选位置,uimm(双拼中"生成密码"的首拼)代表后面这一条代码,代码意思是进入脚本所在目录,然后执行脚本.这里我展示的是导出成文档之后的样子,在输入法里编辑也是一样的,只不过没有逗号等号这些东西了,具体看它自家说明就行
这是实际运行效果,可以看到需要密码时候,只需要开启命令行,输入几个按键,然后回车就完事,甚至命令行的调起、代码执行、密码的复制,也可以简化到一个快捷键完成,不过我不太想搞太复杂,这样就足够了,实际体验下来,比手动点击软件的密码生成器要丝滑
注意:上面的演示使用的是mac系统,win系统的话,只是执行代码的区别,操作方式还是一样的
主要原理就是利用Mac自带的”快捷指令“来实现,所以这里简单贴个图就行,有需要的,自行去百度一下快捷指令的创建方法,然后按照我贴的顺序往上贴就行
注意:不一定非得用“快捷指令”,“自动操作”也可以实现,但是“自动操作”在运行脚本时候会提示访问权限不足,而“快捷指令”没有出现这个问题,所以才用了快捷指令来实现,类似的,任何可以自动化的软件都可以实现这样的效果,比如Alfred这类的