• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: Python  

资源简介

一次性口令身份认证:口令表里存放了用户名、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


评论

共有 条评论