示例:大文件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校验)的更多相关文章

  1. 《Python》hashlib模块、configparser模块、logging模块

    一.hashlib模块 Python的hashlib模块中提供了常见的摘要算法,如md5,sha1等等. 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的字符串(通 ...

  2. python中hashlib模块用法示例

    python中hashlib模块用法示例 我们以前介绍过一篇Python加密的文章:Python 加密的实例详解.今天我们看看python中hashlib模块用法示例,具体如下. hashlib ha ...

  3. 模拟ssh、黏包、hashlib模块(MD5)

    待补充..... 一.模拟ssh 二.黏包 1.黏包现象 让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd) res=subprocess.Popen(cm ...

  4. python hashlib模块 md5加密 sha256加密 sha1加密 sha512加密 sha384加密 MD5加盐

      python hashlib模块   hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, ...

  5. 通过python的hashlib模块计算一个文件的MD5值

    Python的hashlib提供了很多摘要算法,如MD5,SHA1等常用算法. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(如MD5值 ...

  6. hashlib模块 md5 sha1

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示) 对于同一个字符串,不管这个字符串有多长 ...

  7. python的hashlib模块

    # -*- coding: utf-8 -*- """python 的MD5 sha1 模块""" import hashlib #md5的 ...

  8. Python中hashlib模块

    介绍hashlib hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512. ...

  9. python基础--hashlib模块

    hashlib模块用于加密操作,代替了md5和sha模块, 主要提供SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. # -*- coding:utf-8 - ...

随机推荐

  1. 优先级:content –> width –> flex-basis (limted by max|min-width)

    原文: https://www.jianshu.com/p/17b1b445ecd4 -------------------------------------------- 最近在学习Flex Bo ...

  2. 大数据之路week02 List集合的子类

    1:List集合的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数组,查询快,增删慢. 线程不安全,效率高. Vector: 底层数据结构是数组,查询快,增删慢. 线程安 ...

  3. python_json模块和pickle模块

    json 优点:所有语言通用:缺点:只能序列化基本的数据类型list/dict/int... json格式中,字符串必须是双引号,字符都是小写. 序列化: import json v = [12,3, ...

  4. eclipse 设置字体高亮

    在eclipse中不小心按错了什么键,使得变量的高亮显示没了. 其恢复方式如下: 选择:windows-> preferences->java->Editor->Mark Oc ...

  5. Pollard-Rho 总结

    将一个大数\(N\)分解质因子. 试除法,暴力枚举\(1-\sqrt{N}\)的数.时间复杂度:\(O(\sqrt{N})\). 通常,这个复杂度够了,但有时,\(N\leq10^{18}\). 这就 ...

  6. vue编辑、新增弹框(引用外部页面)

    vue编辑.新增弹框(引用外部页面) 2018年06月15日 09:37:20 会飞的猪biubiu 阅读数 10265    版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...

  7. Shell 03 for while case 函数 中断及退出

    一.for循环 1.脚本1,通过循环批量显示5个hello world    ( in 1 2 3 4 5 ) 2.脚本2,通过循环批量显示10个hello world   ( in {1..10} ...

  8. CF788A Functions again dp

    求一个最长子段和就完了,可以出T1? code: #include <bits/stdc++.h> #define N 100006 #define ll long long #defin ...

  9. luogu P4859 已经没有什么好害怕的了

    嘟嘟嘟 题中给的\(k\)有点别扭,我们转换成\(a > b\)的对数是多少,这个用二元一次方程解出来是\(\frac{n + k}{2}\). 然后考虑dp,令\(dp[i][j]\)表示前\ ...

  10. 数据结构实验之图论八:欧拉回路(SDUT 3364)

    Problem Description 在哥尼斯堡的一个公园里,有七座桥将普雷格尔河中两个岛及岛与河岸连接起来. 能否走过这样的七座桥,并且每桥只走一次?瑞士数学家欧拉最终解决了这个问题并由此创立了拓 ...