Python实现通过文件路径获取文件hash值的方法


Posted in Python onApril 29, 2017

本文实例讲述了Python实现通过文件路径获取文件hash值的方法。分享给大家供大家参考,具体如下:

import hashlib
import os,sys
def CalcSha1(filepath):
  with open(filepath,'rb') as f:
    sha1obj = hashlib.sha1()
    sha1obj.update(f.read())
    hash = sha1obj.hexdigest()
    print(hash)
    return hash
def CalcMD5(filepath):
  with open(filepath,'rb') as f:
    md5obj = hashlib.md5()
    md5obj.update(f.read())
    hash = md5obj.hexdigest()
    print(hash)
    return hash
if __name__ == "__main__":
  if len(sys.argv)==2 :
    hashfile = sys.argv[1]
    if not os.path.exists(hashfile):
      hashfile = os.path.join(os.path.dirname(__file__),hashfile)
      if not os.path.exists(hashfile):
        print("cannot found file")
      else
      CalcMD5(hashfile)
  else:
    CalcMD5(hashfile)
    #raw_input("pause")
else:
  print("no filename")

使用Python进行文件Hash计算有两点必须要注意:

1、文件打开方式一定要是二进制方式,既打开文件时使用b模式,否则Hash计算是基于文本的那将得到错误的文件Hash(网上看到有人说遇到Python的Hash计算错误在大多是由于这个原因造成的)。

2、对于MD5如果需要16位(bytes)的值那么调用对象的digest()hexdigest()默认是32位(bytes),同理Sha1digest()hexdigest()分别产生20位(bytes)和40位(bytes)的hash值

Python 相关文章推荐
跟老齐学Python之有容乃大的list(1)
Sep 14 Python
python中的多重继承实例讲解
Sep 28 Python
Python和Perl绘制中国北京跑步地图的方法
Mar 03 Python
python的Crypto模块实现AES加密实例代码
Jan 22 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
python实现批量注册网站用户的示例
Feb 22 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
Django操作session 的方法
Mar 09 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
Python创建自己的加密货币的示例
Mar 01 Python
python 三边测量定位的实现代码
Apr 22 Python
python基于pyDes库实现des加密的方法
Apr 29 #Python
Python简单实现Base64编码和解码的方法
Apr 29 #Python
Python变量和字符串详解
Apr 29 #Python
python实现unicode转中文及转换默认编码的方法
Apr 29 #Python
Python 正则表达式实现计算器功能
Apr 29 #Python
python中类变量与成员变量的使用注意点总结
Apr 29 #Python
Python urls.py的三种配置写法实例详解
Apr 28 #Python
You might like
html中select语句读取mysql表中内容
2006/10/09 PHP
PHP file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
php懒人函数 自动添加数据
2011/06/28 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
PHP实现变色验证码实例
2014/01/06 PHP
php rsa加密解密使用详解
2015/01/14 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
javascript 单选框,多选框美化代码
2008/08/01 Javascript
Javascript 遍历对象中的子对象
2009/07/03 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
医学生个人求职信范文
2013/09/24 职场文书
应届生船舶驾驶求职信
2013/10/19 职场文书
投标担保书范文
2014/04/02 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
大学生入党自荐书
2015/03/05 职场文书
Python 中 Shutil 模块详情
2021/11/11 Python
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis