基于hashlib下的文件校验
hashlib不仅可以对密码进行加密也可以对文件内容进行校验,传统的小文件校验通过人为校验是不现实的,如果摸个文件里面的内容多出一个空格的话那么哦是根本就不知道的因此我们需要一个可以校验文件的方法,而hashlib则可以帮我们实现传统的文件校验
如下我们先试下普通的文件内容校验
代码如下
def check_md5(file):
with open(file,mode="rb") as fp:
hs = hashlib.md5()
hs.update(fp.read())
return hs.hexdigest() res1 = check_md5("ceshi1.txt")
res2 = check_md5("ceshi2.txt")
print(res1,res2)
把两个文件的内容全部丢入hs.update(fp.read())这个对象的方法中
调用hs.hexdigesst的话我会产生一个随机的32位字符串
此时如果两个文件的内容的如果是一模一样的话那么它所产生的随机32位字符串也是一样的这是实现文件校验的基本模型
上面我介绍了小文件的校验,现在我们得考虑一问题,文件的读取都是一股脑的全部丢到内存中进行读取的,那么如果一个文件是特别巨大的呢那时如果一股脑全部丢到内存中的话会直接把内存给挤爆了间接造成了内存的益出
下面我介绍两种方法读一点内容覆盖一点内容
注我们需要明白的是文件不仅是一个可迭代对象,同时也是一个迭代器
那么既然文件是一个迭代器对的话我就可以限制每次到文件中去取一定数值大小的文件进行update连续更新此时不会造成内存的直接爆炸又可以间接的对文件的内容进行校验
代码如下
def check_md5(file):
hs = hashlib.md5()
with open(file,mode="rb") as fp:
while True:
# 最多读取5个字节
content = fp.read(5)
if content:#如果content有值的话我就执行,没有值的话我就执行#else
hs.update(content)
else:
break
return hs.hexdigest() print("<=======方法一=======>")
print(check_md5("ceshi1.txt"))
print(check_md5("ceshi2.txt"))
代码解析,我们要知道hashlib下的update是可以基于上一次的字符串大小更新完32位随机字符串之后继续累加更新的那么我每次从迭代器中取出一致大小的数据循环丢到update中进行持续的更新那么等我取完所有的文件之后所得到的的就是一个完整的32位随机字符串了与传统的文件读取所加密的随机字符串无区别
还有另外一个方法也可以循环的对文件的大小进行校验,重复累加之后所得到的字符创与上面是一致的
代码如下
def check_md5(file):
hs = hashlib.md5()
filesize = os.path.getsize(file)
print(filesize)
with open(file,mode="rb") as fp:
while filesize:
content = fp.read(10)
hs.update(content)
filesize -= len(content)
return hs.hexdigest() print("<=======方法二=======>")
print(check_md5("ceshi1.txt"))
print(check_md5("ceshi2.txt"))
基于hashlib下的文件校验的更多相关文章
- ubuntu 下的文件校验(md5、sha256)
在本地使用 md5sum/sha256sum 生成某待测文件的 hash 值,以跟标准文件的 hash 值做对比验证,确定经网络传输过程得到的文件是否真实无损.一般而言,hash 值如果一致,大概率上 ...
- $Django 模板层(模板导入,继承)、 单表*详(增删改查,基于双下划线的查询)、static之静态文件配置
0在python脚本中使用django环境 import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETT ...
- 使用hashlib进行文件校验
import hashlib import os path = r'D:\CentOS 64 位' def file_md5(path): """ 文件校验 :param ...
- hashlib 文件校验,MD5动态加盐返回加密后字符
hashlib 文件校验 # for循环校验 import hashlib def check_md5(file): ret = hashlib.md5() with open(file, mode= ...
- 手把手写一个基于Spring Boot框架下的参数校验组件(JSR-303)
前言 之前参与的新开放平台研发的过程中,由于不同的接口需要对不同的入参进行校验,这就涉及到通用参数的校验封装,如果不进行封装,那么写出来的校验代码将会风格不统一.校验工具类不一致.维护风险高等其它因素 ...
- system32下 exe文件作用
system32下EXE文件的作用说明 A accwiz.exe 辅助功能向导 ahui.exe 应用程序兼容用户界面 alg.exe 为 Internet 连接共享和 Internet 连接防火墙提 ...
- Hadoop IO 特性详解(2)【文件校验】
(本文引用了microheart,ggjucheng的一些资料,在此感谢.charles觉得知识无价,开源共享无价) 这一次我们接着分析文件IO校验的相关代码,看看最底层是如何实现这种大数据集的文件校 ...
- Servlet3.0学习总结——基于Servlet3.0的文件上传
Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileu ...
- 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】
基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...
随机推荐
- qt md5加密,base64编码解码
qt md5加密,base64编码解码 md5加密 QByteArray data = "12121221"; data += "asdfas"; QByteA ...
- javascript 生成指定范围内的随机数
js 生成任意2个区间内的随机整数,js 生成两个数之间的随机数 function random(m,n) { return Math.floor(Math.random() * (n - m)) + ...
- [Linux] docker 方式安装和使用gitlab-ce
gitlab就相当于我们自己内网搭建的git服务,相当于公司内的github. 拉取镜像docker pull gitlab/gitlab-ce 创建宿主机的数据目录mkdir -p /mnt/git ...
- 『005』Web集群
『006』索引-The Web cluster 准备更新中
- linux下查看程序占用多少内存
执行 ps auxVSZ(或VSS)列 表示,程序占用了多少虚拟内存:RSS列 表示, 程序占用了多少物理内存:虚拟内存可以不用考虑,它并不占用实际物理内存. 或执行top 命令 VIRT(或VSS) ...
- vue之tab切换
<style> .active{ color: red; } div a{ display: block; } </style> <script src="ht ...
- 201871010116-祁英红《面向对象程序设计(java)》第6-7周学习总结
项目 内容 <面向对象程序设计(java)> https://home.cnblogs.com/u/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.c ...
- vue-cli2 打包
npm run build 打包安装 相当于静态资源 解决vue-cli项目打包出现空白页和路径错误的问题 路径错误的问题解决方式: 打开config文件夹下的 index.js 找到如下图所示区域: ...
- 探索clickout指令实现
实现一个可复用的点击区域之外方法 随着3大框架的风靡,我们从以前的layer等UI库迁移到了更加强大的UI库,比如vue的好伙伴element,组件库的作用是封装一些常用的功能,将HTML.CSS.J ...
- 利用数据库视图实现WEB查询敏感信息接口动态脱敏
前言: 利用数据库视图,实现web接口查询敏感信息时动态脱敏. 具体目标:某接口为用户信息查询接口,返回敏感用户信息(id,姓名.手机号[敏感].身份证号[敏感]),如果web用户为管理员角色,则查询 ...