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 - ...
随机推荐
- devops发展历程
第一阶段:只有 Dev ,没有 Ops ,Dev 是全栈工程师 如何理解?最初的时候,产品和业务形态都处于摸索期,业务复杂度不高,访问量不大,软件能够尽快跑起来推向市场是最重要的,所以架构上不设计的很 ...
- SQL SERVER 2008 数据库隔离级别代码演示
SQL SERVER 2008 数据库隔离级别代码演示 个隔离级别(其实这是SQL 工业标) 种隔离级别,本身没有优劣之分,完全取决于应用的场景. 本质上,他们是在 隔离性(紊乱程度) 和 灵活性 ...
- Selenium(十)测试用例错误处理、日志接口、多用户测试
1.一般的错误类型 2.查看错误提示,是一个div,以id为例找到该元素 3.修改测试用例 def checkResult(driver,err_id): try: err = driver.find ...
- Greenplum实战之查询优化
本文主要分为三部分: GP优化需要准备的一些关于优化之外的知识,包括清空缓存.性能监控.执行计划分析. 具体优化措施,从以下四个方面考虑: 表.字段 sql GP配置.服务器配置 硬件及节点资源 GP ...
- easyui-dialog打开之后append("标签")标签存在但是显示不出来
初始化dialog $("#upDiv").dialog("open");//初始化dialog弹出窗口 注意: 1: append("标签&quo ...
- 为什么size_t重要?(Why size_t matters)
之前在<内存拷贝的注意事项>一文中提到过size_t,可能许多人对这个类型不太熟悉没有用过或者根本不敢去用,最近看到一篇文章对这个类型讲的比较详细,便翻译过来让不熟悉的同学可以知道它产生的 ...
- Linux新手到大佬系列——1
站长资讯平台:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的Unix工具软件.应用程序和网络协议 ...
- 2 使用unitest 模块扩展功能测试
准备做一个 待办事项清单网站,来演示 Web 开发过程中的所有主要步骤.以及如何在各个步骤中运用TDD理念. ”功能测试“: 从用户的角度查看应用是如何运作的. 从某种程度上可以作为应用的说明书. 作 ...
- 011_Linux驱动之_s3c2410_gpio_getpin
1. 功能:获取引脚状态 2. 函数原型: unsigned int s3c2410_gpio_getpin(unsigned int pin) { void __iomem *base = S3C2 ...
- InputStreamReader 和 FileReader联系与区别
两者关系: FileReader继承自InputStreamReader : 区别: InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字 ...