资源简介
一次性口令身份认证:口令表里存放了用户名、N次MD5加密的口令、应战值N、随机数R;用户登录输入账号口令认证,认证成功即更新口令和N;N=1时即重置随机数。
代码片段和文件信息
#!/usr/bin/env python3.7
# -*- coding: utf-8 -*-
import hashlib
import random
def user_exist(username):#检测用户是否存在
“““
检查用户是否已经存在
:param username: 用户名
:return: True,则用户名已经存在;False,用户名不存在
“““
with open(‘db‘‘r+‘encoding=“utf-8“) as f:
for line in f:
line = line.strip()
line_list = line.split(“|“)
if username == line_list[0]:
return True
f.close()
return False
def log(user pwd): # 登陆时候时候的函数,由于md5不能反解,因此登陆的时候用正解
with open(‘db‘ ‘r‘ encoding=‘utf-8‘) as f:
for line in f:#一行一行的读取
line_list = line.strip().split(‘|‘)
ran = findran(user)
N = int(findN(user))-1
pwd1 = pwd + ran
p1 = MDme(pwd1N)
if user == line_list[0] and line_list[1] == md5(p1): # 登陆的时候验证用户名以及加密的密码跟之前保存的是否一样
N = str(N)
update(userp1N)
return True
f.close()
def register(user pwd ran): # 注册的时候把用户名和加密的密码写进文件,保存起来
with open(‘db‘ ‘a+‘ encoding=‘utf-8‘) as f:
N=10
pwd = pwd+ran
temp = user + ‘|‘ + MDme(pwdN) + ‘|‘ + ‘10‘ + ‘|‘ + ran + ‘\n‘
f.write(temp)
f.close()
return True
def md5(arg): # 这是加密函数,将传进来的参数进行md5加密
md5_pwd = hashlib.md5() #创建一个MD5对象
md5_pwd.update(arg.encode(encoding=‘utf-8‘))
# 这里必须用encode()函数对字符串进行编码,不然会报 TypeError: Unicode-objects must be encoded before hashing
return md5_pwd.hexdigest() # 返回加密的数据
def MDme(textn):#MD5循环N次加密
while n>=1:
for i in range(n):#进行N次循环
md5 = hashlib.md5()
md5.update(text.encode(encoding=‘UTF-8‘))
md5_result = md5.hexdigest()
text = md5_result
n = n - 1
return md5_result#返回加密完的结果
def findran(user):#找随机数
with open(‘db‘ ‘r‘ encoding=‘utf-8‘) as f:#打开db文件,并赋予只读权限,并用utf-8进行编码,并用f作为该文件的简称
for line in f:#逐行读取文件
line_list = line.strip().split(‘|‘)#去掉文本中每行开头与结尾的符号的(回车符),并以|为分隔符分开存入line_list列表中
if user == line_list[0]:#如果传入的参数user在列表第一列有,则返回第三列的N
f.close()
return line_list[3]
f.close()
def findN(user):#找N
with open(‘db‘ ‘r‘ encoding=‘utf-8‘) as f:
for line in f:
line_list = line.strip().split(‘|‘)
if user == line_list[0]:
f.close()
return line_list[2]
f.close()
def changePass(userpwdN):
with open(‘db‘‘r‘encoding=‘utf-8‘) as f:
for line in f:
line_list = line.strip().split(‘|‘)
ran = findran(user)
pwd1 = pwd + ran
p1 = MDme(pwd1int(N))
update(userp1N)
f.close()
def changeran(usernameN):#改变随机数
with open(“db“ “r“) as f:
lines = f.readlines()
for lin in f.readlines():
if lin!=‘\n‘:
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5658 2019-05-07 13:08 一次性口令身份认证.py
文件 0 2019-05-07 13:09 db
----------- --------- ---------- ----- ----
5658 2
相关资源
- XGboost训练印第安人糖尿病数据
- 查找两幅图中不同
- PyQt5:简单视频播放器
- Machine learning DecisionTree
- Face-tracking.zip
- [MIT][计算机科学及编程导论][6.00][课程
- 花卉识别程序+数据集
- SciHub神器,基于爬虫原理
- 机器学习-泰坦尼克号船员获救
- 基于Flask的留言板Demo
- tensorflow-2.3.0-cp37-cp37m-win_amd64.whl
- tensorflow麻将智能出牌源码
- PyCharm汉化后设置界面打不开完美解决
- QQLogin.ui
- django试题发布和测验
- PIL中文手册
- subdomain.txt
- 神经网络和深度学习—吴恩达 第三周
- 癫痫预测代码
- package control离线包
- 利用百度人脸识别API和pyqt5实现基于人
- xlwt-1.0.0-py2.py3-none-any.whl
- 天眼查爬虫亲测可以用
- ATM.zip 一个简单的ATM主要是熟悉对象的
- SendKeys-0.3_py27.exe
- requests 实现的 api 自动化测试框架
- Machine Learning Linear Regression-线性回归
- 动漫知识图谱代码及关系文件
- k-means训练
- 易班自动答题脚本全版
评论
共有 条评论