python 密码验证

article/2025/8/21 19:12:11

题目描述:

(1)模拟登陆界面,判别用户名和密码,给出合适的提示,如果超过三次,锁定输入。用代替密码;或者最新输入显示,前面的变成;安全性措施。
(2)同时添加如下图的加强验证(京东)。
(3)在触动滚动条时再出现空缺位置。
在这里插入图片描述
拓展:

  • 增加注册页面,可供用户注册新用户
  • 增加数字验证码区别人机

解题思路/算法分析/问题及解决

滑块验证就是将滑块的移动和图片小块的移动相绑定,在滑块松开时触发相对应的检查函数,为了有一定的容错率,设定滑块的位置与设定的位置相差3个像素以内即算验证成功。

  • 每次的位置随机生成,同时随即从14张事先准备好的图片中选取一张作为背景图。
  • 图片小块和背景图片分别放在两个不同的QLabel容器中。
  • 每次刷新时将背景图片的相应位置抠出放于图片小块中,并将背景图片的相应部分置为白色以示区别。
    拓展:
  • 新增注册页部分就是点击按钮弹出注册页的对话框,可在里面输入新用户信息并保存到用户信息字典中,随后可用新注册的用户登录。
  • 数字验证码由4位数字0-9和字母a-z及A-Z组成,随机在可行字符集中选取4个字符组成四位验证码,然后自动生成验证码以图片的方式呈现给用户。

实验代码

登录主界面:
登录验证:

def check_login_func(self):if not self.validate_line.text():QMessageBox.warning(self, "警告", "还未输入验证码")returnvalidate_slide = Validate_page()r = validate_slide.exec_()if not r:returnif self.validate.upper() == self.validate_line.text().upper():if USER_PWD.get(self.user_line.text()) == self.pwd_line.text():QMessageBox.information(self, 'Information', 'Log in Successfully!')self.nums = 0self.refresh()# self.close()# self.STU.exec()else:QMessageBox.critical(self, 'Wrong', 'Wrong Username or Password!')self.nums = self.nums + 1if self.nums == 3:QMessageBox.critical(self, "wrong", "密码输错次数已达三次!")self.close()self.user_line.clear()self.pwd_line.clear()self.validate_line.clear()else:QMessageBox.critical(self, "wrong", "验证码输入有误!")self.refresh()self.validate_line.clear()

自动生成验证码图片:

def get_chars():"""生成给定长度的字符串,返回列表格式"""return random.sample(chars, length)def create_lines():"""绘制干扰线"""line_num = random.randint(*n_line)  # 干扰线条数for i in range(line_num):# 起始点begin = (random.randint(0, size[0]), random.randint(0, size[1]))# 结束点end = (random.randint(0, size[0]), random.randint(0, size[1]))draw.line([begin, end], fill=(0, 0, 0))def create_points():"""绘制干扰点"""chance = min(100, max(0, int(point_chance)))  # 大小限制在[0, 100]for w in range(width):for h in range(height):tmp = random.randint(0, 100)if tmp > 100 - chance:draw.point((w, h), fill=(0, 0, 0))def create_strs():"""绘制验证码字符"""c_chars = get_chars()strs = ' %s ' % ' '.join(c_chars)  # 每个字符前后以空格隔开font = ImageFont.truetype(font_type, font_size)font_width, font_height = font.getsize(strs)draw.text(((width - font_width) / 3, (height - font_height) / 3),strs, font=font, fill=fg_color)return ''.join(c_chars)if draw_lines:create_lines()if draw_points:create_points()strs = create_strs()# 图形扭曲参数params = [1 - float(random.randint(1, 2)) / 100,0,0,0,1 - float(random.randint(1, 10)) / 100,float(random.randint(1, 2)) / 500,0.001,float(random.randint(1, 2)) / 500]img = img.transform(size, Image.PERSPECTIVE, params)  # 创建扭曲img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)  # 滤镜,边界加强(阈值更大)mstream = io.BytesIO()img.save(mstream, img_type)if save_img:img.save("validate.jpg", img_type)return mstream, strs

注册界面部分:
页面初始化:

def __init__(self):super(SigninPage, self).__init__()self.signin_user_label = QLabel('Username:', self)self.signin_pwd_label = QLabel('Password:', self)self.signin_pwd2_label = QLabel('Password:', self)self.signin_user_line = QLineEdit(self)self.signin_pwd_line = QLineEdit(self)self.signin_pwd2_line = QLineEdit(self)self.signin_button = QPushButton('Sign in', self)self.user_h_layout = QHBoxLayout()self.pwd_h_layout = QHBoxLayout()self.pwd2_h_layout = QHBoxLayout()self.all_v_layout = QVBoxLayout()self.lineedit_init()self.pushbutton_init()self.layout_init()def layout_init(self):self.user_h_layout.addWidget(self.signin_user_label)self.user_h_layout.addWidget(self.signin_user_line)self.pwd_h_layout.addWidget(self.signin_pwd_label)self.pwd_h_layout.addWidget(self.signin_pwd_line)self.pwd2_h_layout.addWidget(self.signin_pwd2_label)self.pwd2_h_layout.addWidget(self.signin_pwd2_line)self.all_v_layout.addLayout(self.user_h_layout)self.all_v_layout.addLayout(self.pwd_h_layout)self.all_v_layout.addLayout(self.pwd2_h_layout)self.all_v_layout.addWidget(self.signin_button)self.setLayout(self.all_v_layout)def lineedit_init(self):self.signin_user_line.setPlaceholderText("username")self.signin_pwd_line.setPlaceholderText("password")self.signin_pwd2_line.setPlaceholderText("password again")self.signin_pwd_line.setEchoMode(QLineEdit.Password)self.signin_pwd2_line.setEchoMode(QLineEdit.Password)self.signin_user_line.textChanged.connect(self.check_input_func)self.signin_pwd_line.textChanged.connect(self.check_input_func)self.signin_pwd2_line.textChanged.connect(self.check_input_func)

注册检验部分:

def check_signin_func(self):if self.signin_pwd_line.text() != self.signin_pwd2_line.text():QMessageBox.critical(self, 'Wrong', 'Two Passwords Typed Are Not Same!')elif self.signin_user_line.text() not in USER_PWD:USER_PWD[self.signin_user_line.text()] = self.signin_pwd_line.text()QMessageBox.information(self, 'Information', 'Register Successfully')self.close()else:QMessageBox.critical(self, 'Wrong', 'This Username Has Been Registered!')self.signin_user_line.clear()self.signin_pwd_line.clear()self.signin_pwd2_line.clear()

滑块验证部分:

class Validate_page(QDialog):def __init__(self):super(Validate_page, self).__init__()self.resize(600, 500)self.setWindowTitle("拖动滑块验证")self.initUI()self.Widget_init()self.refresh()# self.show()def initUI(self):# 初始化相关控件位置self.lb_bg = QLabel(self)self.lb_sl = QLabel(self)self.lb_bg.setStyleSheet("border: 2px solid red")# self.lb_sl.setStyleSheet("border: 2px solid blue")self.lb_bg.setGeometry(100, 100, 400, 200)self.lb_wz = QLabel(self)# self.lb_wz.setStyleSheet("border: 2px solid green")self.refresh()self.button = QPushButton("取消", self)self.button.setGeometry(400, 430, 100, 50)self.slider = QSlider(Qt.Horizontal, self)self.slider.setGeometry(100, 350, 400, 50)def Widget_init(self):# 初始化相关组件的信号连接self.slider.setMinimum(0)self.slider.setMaximum(360)self.slider.valueChanged.connect(self.slide)self.slider.sliderReleased.connect(self.check)self.button.clicked.connect(self.cancel)def slide(self, value):self.lb_sl.move(100 + value, self.answer_y)  # 将滑块与图片小块绑定# print(value)def refresh(self):import random# 随机生成验证区域self.answer_x = random.randint(100, 460)self.answer_y = random.randint(100, 260)pic = random.randint(0, 14)self.lb_sl.setGeometry(100, self.answer_y, 40, 40)self.lb_wz.setGeometry(self.answer_x, self.answer_y, 40, 40)img = cv2.imread(f"pic/{pic}.jpeg")  # 读取背景图片img = cv2.resize(img, (400, 200))x = self.answer_x - 100y = self.answer_y - 100img1 = copy.copy(img[y:y + 40, x:x + 40])  # 扣40*40的图片小块img[y:y + 40, x:x + 40] = 255  # 将被扣区域置为白色img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)qt_img = QImage(img.data, 400, 200, QImage.Format_RGB888)qt_img1 = QImage(img1.data, 40, 40, QImage.Format_RGB888)self.lb_bg.setPixmap(QPixmap.fromImage(qt_img))self.lb_sl.setPixmap(QPixmap.fromImage(qt_img1))def check(self):  # 检验滑动验证是否成功# 获取设定区域坐标x = self.lb_sl.pos().x()y = self.lb_sl.pos().y()print(f"({x},{y})")if abs(x - self.answer_x) <= 3:  # 容错为3pxQMessageBox.information(self, "恭喜", "验证成功")self.done(1)else:QMessageBox.critical(self, "错误", "验证失败")self.slider.setValue(0)self.refresh()def cancel(self):self.done(0)  # 点击取消滑动验证

运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
全部背景图片:
在这里插入图片描述
注册界面:
在这里插入图片描述
完整代码
【网盘链接】
提取码:27yz


http://chatgpt.dhexx.cn/article/cQsFX5nr.shtml

相关文章

MMDetection的安装及验证

参考&#xff1a;安装 — MMDetection 2.22.0 文档 进入openMMLab社区好久了&#xff0c;但是前面都是在学一些基础知识&#xff0c;最近看到了目标检测的部分&#xff0c;然后尝试配置了一下mmDet的环境&#xff0c;过程中踩了很多坑&#xff0c;也用了很长时间&#xff0c;在…

java环境变量配置验证_怎么验证Java环境变量配置成功

Java环境变量已经配置完了,不知道行不行,那么怎么验证Java环境变量配置成功呢?下面是学习啦小编收集整理的怎么验证Java环境变量配置成功&#xff0c;希望对大家有帮助~~ 验证Java环境变量配置成功的方法 方法/步骤 首先&#xff0c;在桌面右击&#xff0c;选择“文本文档”&a…

验证tomcat安装成功

安装之后: 1.到安装目录下找startup.bat不闪退,并出现以下图2为成功安装: 再打开谷歌浏览器输入: localhost:8080验证. Tomcat服务器介绍和使用: 服务器的概念和作用: 问题: 学习了java编程之后,java代码的一个很重要的作用就是进行数据的处理,但是目前来说我们运行编写的…

京东手势验证

先给大家看看京东的验证码有多变态 长这个样子&#xff0c;作者测试过程中在浏览器最多划了二十几次才通过&#xff0c;搞到我都开始怀疑根本就过不去。jd验证码花了我一周多时间才搞完&#xff0c;一直卡在这个轨迹上面&#xff0c;想用深度学习又不知道弄出来轨迹该怎么生成&…

[ant design vue] 表单验证成功,提示信息不显示

以上是原图以及源代码&#xff0c;input中带有表单验证&#xff0c;但是输入0以后却不显示报错信息&#xff0c;后来通过大哥指点&#xff0c;因为一个a-form-item只验证一个input,所以给每一个input加一个a-form-item问题解决。代码及效果如下&#xff1a;

怎么验证mysql安装成功_mysql如何验证是否安装成功

mysql验证是否安装成功的方法&#xff1a;1、打开DOS窗口&#xff0c;输入status命令查看MySQL版本信息&#xff1b;2、打开MySQL 5.7 Command Line Client程序&#xff0c;打开当前MySQL服务器状态&#xff0c;输入相关命令能显示当前的数据库列表即可。 相关学习推荐&#xf…

局域网内构建自己的ntp校时服务器并验证成功与否

局域网内构建自己的ntp校时服务器并验证成功与否 最近委座提了个要求&#xff0c;模拟客户那边的环境&#xff0c;局域内网搭建个ntp校时服务器&#xff0c;然后让其他服务器跟这个ntp服务器保持一致的时间。 开始干吧&#xff0c;分2步走&#xff1a;1.先找两台centos7.x的服…

Vue Element表单验证成功后,清空表单

this.$refs.ruleForm.resetFields() 这是用来清空表单的代码&#xff0c;实际使用可以放在显示操作成功的代码下面&#xff0c;在接口调用成功后执行。 出处是&#xff1a;

JWT的介绍与应用

目录 2.JWT的应用场景 3.JWT的应用详解 4.为什么要用JWT 2.1 传统Session认证的弊端 2.2 JWT认证的优势 5.JWT结构 1.Header 2.Payload 3.Signature 6.JWT的种类 JSON Web Token&#xff08;JWT&#xff09;是一个开放式标准&#xff08;RFC 7519&#xff09;&#xf…

判断MySQL安装是否成功的两种验证方法

如何判断MySQL是否安装成功&#xff1f; 一、命令提示符cmd窗口验证二、MySQL控制台验证 一、命令提示符cmd窗口验证 键盘winR打开命令提示符&#xff0c;输入cmd。 在电脑中找到安装好的MySQL的bin文件目录 。这是我的安装目录C:\Program Files\MySQL\MySQL Server 5.7\bin。…

Anaconda 安装及验证是否安装成功

关于安装&#xff1a; 1、打开准备好的安装包&#xff08;官网下载或者镜像网站下载都可以&#xff09;&#xff0c;点next 2、继续点I Agree 3、点All Users 4、安装位置&#xff0c;默认安装在C盘&#xff0c;点击更改&#xff0c;自定义路径&#xff0c;要确保这个路径下是…

如何将Excel数据转化成树状结构

数据如下图 请问怎么才能将以上数据转换成树状结构 因为数据较多&#xff0c;除去手动分组的方法请问还有什么方法呢&#xff1f;

Excel表格中建立树形结构

Excel表格中建立树形结构 2010-04-05 17:56:37| 分类&#xff1a; 开发笔记 |字号 订阅 有时在excel表格中需要建立树形结构&#xff0c;如下图所示。 对动物、植物进行分类。 动物、植物类中分别有子类&#xff0c;像动物中有鸟、猫、狗等。 每个子类又有自己的子类&#…

excel数据处理,表格数据处理成树形结构

excel数据模版如下&#xff1a;红色部分为一级菜单&#xff0c;绿色部分为二级菜单&#xff0c;绿色部分对应的是三级菜单 现在将数据转化为树形结构 名称&#xff0c;编码&#xff0c;上级编码&#xff0c;这种格式&#xff0c;首先将数据做转化导入到mysql mysql根据逗号将一…

poi java导入树状结构即父子数据的excel

父子结构的excel&#xff08;java&#xff09;导入数据库&#xff0c;页面上展示成树状结构 excel数据结构 java代码 Controller层 我这里传入的参数除了文件&#xff0c;有一个id&#xff0c;id为页面上的目录上的一个节点id,可理解为我导入的目录实在某一个节点下展现&…

Mac如何使用python创建Excel文件,并进行内容写入

python中创建Excel文件&#xff0c;并进行内容写入 引用第三方库 1、进入python环境路径下&#xff0c;使用终端进入该路径&#xff1b; cd XXX #python环境路径如找不到该路径&#xff0c;可以直接复制pycharm中的python环境路径&#xff0c;在finder搜索&#xff0c;会展…

今天用Excel做一颗圣诞树,小伙伴们都惊呆了!

今天是圣诞节&#xff0c;教大家用Excel做一棵圣诞树 具体操作如下&#xff1a; 1、首先把你要用来画圣诞树的列&#xff0c;调整为合适的列宽&#xff1b; 2、然后按住Ctrl&#xff0c;选中树状的单元格区域&#xff1b; 3、再输入RAND()函数&#xff0c;按下CtrlEnter填充…

java poi导出树形结构到excel文件

maven pom.xml下载poi包 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifact…

Python 自动化操作 Excel 绘制条形图!

作者 | 黄伟呢 来源 | 数据分析与统计学之美 今天&#xff0c;有位朋友在群里面咨询了一个问题。 大致意思如图所示&#xff1a; 有人提议用vba&#xff0c;但是不得不说&#xff0c;没有学过vba的朋友&#xff0c;会觉得vba用起来很困难。那还不容易&#xff0c;直接上Python&…