资源简介
一次性口令身份认证:口令表里存放了用户名、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
相关资源
- Pythonamp;课堂amp;笔记(高淇amp;400;集第
- Python中Numpy库最新教程
- 用python编写的移动彩信的发送程序
- Python全栈学习笔记面向对象大作业:
- python实现的ftp自动上传、下载脚本
- Python版的A*寻路算法
- IronPython IDE
- pip-10.0.1.tar.gz
- Data Science from Scratch 2nd Edition
- shape_predictor_68_face_landmarks.dat.bz2 68个标
- 爬取豆瓣电影TOP250程序,包含非常详
- 中文维基百科语料库百度网盘网址.
- MSCNN_dehaze.rar
- 爬取豆瓣排行榜电影数据(含GUI界面
- 字典文本资源
- Brainfuck / OoK 解码脚本
- 案例实战信用卡欺诈检测数据集
- 招商策略_抱团启示录那些年我们一起
- sip-4.19.zip
- 树莓派3b+学习使用教程
- numpy 中文学习手册
- pytorch-1.4.0-py3.7_cpu_0.tar.bz2
- 机器学习实战 高清完整版PDF
- 泰坦尼克号0.81准确率实验报告.docx
-
abaqus sc
ripting reference manual.pdf - 网页版聊天程序--网络程序设计课程大
- Give Me Some Credit
-
ba
semap安装出错时,正确得pyproj文件 - 微信头像拼接工具
- 统计思维:程序员数学之概率统计第
评论
共有 条评论