吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1619|回复: 18
收起左侧

[讨论] 借助python实现密码生成器

  [复制链接]
甜萝 发表于 2022-7-6 17:44
本帖最后由 paypojie 于 2022-7-7 14:07 编辑

                                                                                                    生成密码字段
众所周知 python是一门面向对象的高级编程语言 所以我们借助它来实现一些小玩具   看看效果怎么样  代码如下 嘿嘿
[Python] 纯文本查看 复制代码
import random
class Password:
    def number(self,n):
        num = '0123456789'
        s = ''
        for i in range(n):
            r = random.choice(num)
            s += r
        print(s)
    def str1(self,n):
        st1 = 'qwertyuiopasdfghjklzxcvbnm'
        s = ''
        for i in range(n):
            r = random.choice(st1)
            s += r
        print(s)
    def str2(self,n):
        st2 = 'QWERTYUIOPASDFGHJKLZXCVBNM'
        s = ''
        for i in range(n):
            r = random.choice(st2)
            s += r
        print(s)
    def number_str1(self,n):
        num_st1 = '0123456789qwertyuiopasdfghjklzxcvbnm'
        s = ''
        for i in range(n):
            r = random.choice(num_st1)
            s += r
        print(s)
    def number_str2(self,n):
        num_st2 = '0123456789QWERTYUIOPASDFGHJKLZXCVBNM'
        s = ''
        for i in range(n):
            r = random.choice(num_st1)
            s += r
        print(s)
    def str1_str2(self,n):
        st1_St2 = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
        s = ''
        for i in range(n):
            r = random.choice(st1_St2)
            s += r
        print(s)
    def number_str1_str2(self,n):
        num_St1_St2 = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
        s = ''
        for i in range(n):
            r = random.choice(num_St1_St2)
            s += r
        print(s)
    def number_str1_str2_SpecialStr(self,n):
        num_St1_St2_SpecialStr = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM^\|<>¢£?¥&#8369;[]}{#% +=~_-/:;()$&"`?! *@,\''
        s = ''
        for i in range(n):
            r = random.choice(num_St1_St2_SpecialStr)
            s += r
        print(s)
p = Password()
print('请选择你要生成的数据类型 ')
Flag = True
while Flag:
    ipt = int(input('1:数字 2:小写字母 3:大写字母 4:数字小写字母中挑选 5:数字大写字母中挑选 6:小写字母大写字母中挑选 7:数字小写字母大写字母中挑选 8:数字小写字母大写字母特殊字符中挑选 请输入选项所对应的数字: '))
    n = int(input('请选择你要生成的长度: '))
    if ipt == 1:
        p.number(n)
    elif ipt == 2:
        p.str1(n)
    elif ipt == 3:
        p.str2(n)
    elif ipt == 4:
        p.number_str1(n)
    elif ipt == 5:
        p.number_str2(n)
    elif ipt == 6:
        p.str1_str2(n)
    elif ipt == 7:
        p.number_str1_str2(n)
    else:
        p.number_str1_str2_SpecialStr(n)
    hello1 = int(input('请问是否继续生成数据 生成请输入1 退出请输入2: '))
    if hello1 == 1:
        Flag = True
    else:
        Flag = False

可以通过这个在线运行https://py2.codeskulptor.org/在线运行真的超级方便 即便没有python环境也可以运行测试 哈哈哈 不过写的比较粗糙 后来我又把代码给优化了一下
[Python] 纯文本查看 复制代码
import random
num = '0123456789'
st1 = 'qwertyuiopasdfghjklzxcvbnm'
st2 = 'QWERTYUIOPASDFGHJKLZXCVBNM'
num_st1 = '0123456789qwertyuiopasdfghjklzxcvbnm'
num_st2 = '0123456789QWERTYUIOPASDFGHJKLZXCVBNM'
st1_St2 = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
num_St1_St2 = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
num_St1_St2_SpecialStr = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM^\|<>¢£?¥&#8369;[]}{#% +=~_-/:;()$&"`?! *@,\''
class Password:
    def password(self,n,select):
        s = ''
        for i in range(n):
            r = random.choice(select)
            s += r
        print(s)
p = Password()
print('请选择你要生成的数据类型 ')
Flag = True
while Flag:
    ipt = int(input('1:数字 2:小写字母 3:大写字母 4:数字小写字母中挑选 5:数字大写字母中挑选 6:小写字母大写字母中挑选 7:数字小写字母大写字母中挑选 8:数字小写字母大写字母特殊字符中挑选 请输入选项所对应的数字: '))
    n = int(input('请选择你要生成的长度: '))
    if ipt == 1:
        p.password(n,num)
    elif ipt == 2:
        p.password(n,st1)
    elif ipt == 3:
        p.password(n,st2)
    elif ipt == 4:
        p.password(n,num_st1)
    elif ipt == 5:
        p.password(n,num_st2)
    elif ipt == 6:
        p.password(n,st1_St2)
    elif ipt == 7:
        p.password(n,num_St1_St2)
    else:
        p.password(n,num_St1_St2_SpecialStr)

    hello1 = int(input('请问是否继续生成数据 生成请输入1 退出请输入2: '))
    if hello1 == 1:
        Flag = True
    else:
        Flag = False


(改进后的代码的想法 ) 对于生成这种密码的思路 是如何做到的呢 先导入random模块 因为要产生密码 所以要对序列里的元素进行随机组合  (序列可以是纯数字 也可以是字母 特殊字符或者其它等等)
再定义序列变量 比如数字序列 字母序列等 这些序列变量定义在类外面的 然后 再定义一个类 我们在类中定义password(self,n,select)方法 第一个形参是按照惯例定义的 self表示创建的实例本身 第二个表示要生成密码的长度 第三个表示要选则的序列 定义变量s s是一个空字符串 用来保存每次产生的单个序列元素 然后for循环 循环的次数由用户输入的n决定 n可以看做产生密码的长度 也可以看做在序列中随机挑选元素的次数 再打印s变量
之后 再将类给实例化 也就是创建实例对象 再输出提示 定义Flag变量 进入while循环 定义了两个input变量 用来提示输入 然后进行条件判断 用户输入的是数字几 就调用类的对应方法 然后询问用户是否要继续进行生成密码 如果生成则进入while循环 否则 Flag变量为False 就无法进入while循环 就退出




总结 导入模块 定义变量  定义类  类中定义方法 实例化类 输出提示 进入while循环 之后条件判断 根据条件调用对应方法 再进行条件判断 要么继续 要么退出

cmd运行结果
截图.png


python的random.randint()选择我猜测属于伪随机选择
疑问? 借用python生成的密码安全吗 就是我这种写法 别人能通过其他办法预测我产生的密码吗 有知道的请解惑 谢谢

免费评分

参与人数 1吾爱币 +1 收起 理由
zhczf + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 甜萝 发表于 2022-7-6 17:56
没人吗 嗷呜
vethenc 发表于 2022-7-6 18:03
 楼主| 甜萝 发表于 2022-7-6 18:27
wkdxz 发表于 2022-7-6 18:32
能不能不写那么长?
[Python] 纯文本查看 复制代码
num = '0123456789'
st1 = 'qwertyuiopasdfghjklzxcvbnm'
st2 = st1.upper()
num_st1 = f'{num}{st1}'
num_st2 = f'{num}{st2}'
st1_St2 = f'{st1}{st2}'
num_St1_St2 = f'{num}{st1}{st2}'
 楼主| 甜萝 发表于 2022-7-6 18:35
wkdxz 发表于 2022-7-6 18:32
能不能不写那么长?
[mw_shl_code=python,true]num = '0123456789'
st1 = 'qwertyuiopasdfghjkl ...

我想到了简化 但是额
tcll呀呀 发表于 2022-7-6 18:35
感谢楼主分享
 楼主| 甜萝 发表于 2022-7-6 18:36

不用谢 哈哈哈
sapin 发表于 2022-7-6 19:02

楼主你好哇,其实我也是个python小白,谢谢你的分享,大家一起讨论学习.

首先,是否可以考虑用string模块. string.ascii_letters string.digits string.hexdigits string.punctuation能省不少麻烦.

然后是radnom模块, 用random.choices或者random.sample直接取然后join.也挺省事的.

同时是否可以考虑加一个安全模式:不echo密码内容防窥屏

https://docs.python.org/3/library/secrets.html#recipes-and-best-practices

{:1_921:}
 楼主| 甜萝 发表于 2022-7-6 19:10
sapin 发表于 2022-7-6 19:02
[md]楼主你好哇,其实我也是个python小白,谢谢你的分享,大家一起讨论学习.

首先,是否可以考虑用`string` ...

"同时是否可以考虑加一个安全模式:不echo密码内容防窥屏 "
这个可以考虑 嘿嘿
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表