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"))

最新文章

  1. selenium截图对比校验方法
  2. CPU过高的排查方法
  3. 在Elasticsearch中查询Term Vectors词条向量信息
  4. [转]TextArea设置MaxLength属性最大输入值的js代码
  5. 【leetcode】Minimum Path Sum(easy)
  6. IIS7上设置MIME让其支持android和Iphone的更新下载
  7. dede让channelartlist标签支持currentstyle属性 完美解决
  8. 利用 js 实现弹出蒙板(model)功能
  9. exe文件当前目录搜索文件
  10. quartz定时任务中常用的cron表达式
  11. 零拷贝概念 -- linux内核
  12. javascript实现贪吃蛇
  13. python常用模块(1):collections模块和re模块(正则表达式详解)
  14. JUnit4在Eclipse中的使用
  15. Mysql引擎中MyISAM和InnoDB的区别有哪些?
  16. 移动端开发底部元素margin-bottom失效解决办法
  17. python selenium 自动化测试web
  18. php中header函数参数的Cache-control的使用方法
  19. [双系统linux] ----双系统切换导致系统时间错误
  20. 解决Window安全中心对Kitematic-0.17.3-Ubuntu.zip提示病毒,但无法删除的问题。

热门文章

  1. Incorrect datetime value: &#39;&#39; for column &#39;examDate&#39; at row 1
  2. ntp服务设置开机自启动失败
  3. Vysor
  4. 【CSP-S 2019】D2T2 划分
  5. &lt;BackTracking&gt; permutation 254 47 60
  6. POJ3104Drying(二分)
  7. 剑指offer:剪绳子(找规律,贪心算法,动态规划)
  8. [分布式学习]消息队列之rocketmq笔记
  9. Loj #2568. 「APIO2016」烟花表演
  10. PHP-内嵌foreach的巧妙优化