python之hashlib模块(MD5校验)
示例:大文件md5校验
def md5(fileMd5):
import hashlib
md5_value = hashlib.md5()
with open(fileMd5,'rb') as f:
while True:
#每次读取2048个字节数据
data = f.read(2048)
if not data:
brea
#计算md5值
md5_value.update(data)
return md5_value.hexdigest()
示例:密码加密
本例我一个登录验证的装饰器
#!/usr/bin/env python
#-*- coding:utf-8 -*-
"""
功能:
登录验证模块
详细说明:
1.密码文件为passwd
2.passwd未创建或丢失,会提示:密码文件不存在,建议重新注册!!
3.未注册用户登录会提示:用户名不存在,请您先进行注册!
4.已注册用户登录时,忘记密码,尝试3次后密码还不正确则退出验证,等一会儿则可以重新登录
5.作为装饰器进行登录验证
"""
import json
import hashlib
import os
pwd = os.getcwd()
fileName = os.path.join(pwd,"passwd") #将明文密码通过md5进行加密,返回一个加密后的md5的值
def calc_md5(passwd):
md5 = hashlib.md5("haliluya")
md5.update(passwd)
ret = md5.hexdigest()
return ret #新用户注册模块
def register():
#判断密码文件passwd是否存在,存在则载入列表,不存在就重新创建一个空字典
if os.path.exists(fileName):
#载入用户列表,数据结构为字典,k=userName,v=passwdMd5
with open("passwd", "r+") as loadsFn:
userDB = json.loads(loadsFn.read())
else:
userDB = {}
#让用户输入用户名
userName = raw_input("姓名:")
#标志位:控制循环跳出
flag = True
while flag:
#用户注册时,需输入两次密码
passwd1 = raw_input("密码:")
passwd2 = raw_input("确认密码:")
#如果两次密码不一致,则不执行下一步,再次输入密码并进行确认
if not passwd1 == passwd2:
continue
else:
#两次输入密码一致,标志位置为False,下次跳出循环
flag = False
#调用calc_md5函数将明文密码转为对应的md5值,用于保存
passwdMd5 = calc_md5(passwd1)
#将用户名与密码对应存入字典userDB中
userDB[userName] = passwdMd5
#将用户名和密码存入文件
with open(fileName, "w") as dumpFn:
dumpFn.write(json.dumps(userDB)) #用户登录验证,装饰器
def login(func):
def decorater(*args,**kwargs):
#判断passwd文件是否存在,存在则载入userDB(用户:密码),否则就重新注册新的passwd文件并返回
if os.path.exists(fileName):
with open("passwd", "r+") as loadsFn:
userDB = json.loads(loadsFn.read())
else:
print "密码文件不存在,建议重新注册!!"
register()
return name = raw_input("用户名:")
#用户名是否存在,存在就继续输入密码,不存在则进行注册
if name in userDB.keys():
flag = True
counter = 0
#循环输入密码,密码正确,flag=False(下次直接跳出循环)并执行函数,密码错误则允许尝试3次,超过3次验证失败,退出验证
while flag:
passwd = raw_input("密码:")
passwdMd5 = calc_md5(passwd)
if passwdMd5 == userDB[name]:
flag = False
func(*args,**kwargs)
elif counter > 2:
print "您已经尝试了3次,请过会儿再试!!"
return
else:
counter += 1
else:
print "用户名不存在,请您先进行注册!"
register()
return decorater if __name__ == "__main__":
@login
def hello():
print "Hello world!"
hello()
python之hashlib模块(MD5校验)的更多相关文章
- 《Python》hashlib模块、configparser模块、logging模块
一.hashlib模块 Python的hashlib模块中提供了常见的摘要算法,如md5,sha1等等. 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的字符串(通 ...
- python中hashlib模块用法示例
python中hashlib模块用法示例 我们以前介绍过一篇Python加密的文章:Python 加密的实例详解.今天我们看看python中hashlib模块用法示例,具体如下. hashlib ha ...
- 模拟ssh、黏包、hashlib模块(MD5)
待补充..... 一.模拟ssh 二.黏包 1.黏包现象 让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd) res=subprocess.Popen(cm ...
- python hashlib模块 md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐
python hashlib模块 hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ...
- 通过python的hashlib模块计算一个文件的MD5值
Python的hashlib提供了很多摘要算法,如MD5,SHA1等常用算法. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(如MD5值 ...
- hashlib模块 md5 sha1
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示) 对于同一个字符串,不管这个字符串有多长 ...
- python的hashlib模块
# -*- coding: utf-8 -*- """python 的MD5 sha1 模块""" import hashlib #md5的 ...
- Python中hashlib模块
介绍hashlib hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. ...
- python基础--hashlib模块
hashlib模块用于加密操作,代替了md5和sha模块, 主要提供SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. # -*- coding:utf-8 - ...
随机推荐
- springboot的简单了解与使用
1. Spring Boot 1.1. 什么是Spring Boot 1.2. Spring Boot的优缺点 1.3. 快速入门 1.3.1. 设置spring boot的parent <pa ...
- 0012SpringBoot访问首页
有三种方式可以实现访问首页: 第一种: 定义一个Controller,定义请求方法和返回内容,方法内容如下: @RequestMapping({"/","/index&q ...
- 二分法:从一个只包含数字的list中查找某个数
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2017/4/10 19:03 # @Author : MnCu # @Site : # ...
- sql server 函数学习
sql server 创建函数 资料 https://docs.microsoft.com/zh-cn/sql/relational-databases/user-defined-functions/ ...
- javaMail 详解
原文:http://www.matrix.org.cn/resource/article/44/44101_JavaMail.html 一.JavaMail API简介JavaMail API是读取. ...
- linux下core dump--转载
原文链接:https://www.cnblogs.com/Anker/p/6079580.html 1.前言 一直在从事linux下后台开发,经常与core文件打交道.还记得刚开始从事linux下 ...
- 参数类型 (@Service层) interface 常用参数类型举例
public AdvMessage getMessage(String message, String type); public List<Map<String,Object>&g ...
- Noip2011 提高组 选择客栈
P1311 选择客栈 直通 思路: ①看题,我们可以发现一个显然的性质,即当最左边的客栈向右移动时,最右边的客栈时单调向右的,并且右端点往右的客栈也符合要求.(因为只要左侧有一个满足的,右边的自然可以 ...
- 【线性代数】6-5:正定矩阵(Positive Definite Matrices)
title: [线性代数]6-5:正定矩阵(Positive Definite Matrices) categories: Mathematic Linear Algebra keywords: Po ...
- The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest B、H
比赛链接https://www.jisuanke.com/contest/3098?view=challenges B题 拉格朗日插值 题意 T组输入.一个n次多项式 f(x) ,每项的系数不知道, ...