python计算Content-MD5并获取文件的Content-MD5值方式


Posted in Python onApril 03, 2020

1、首先计算MD5加密的二进制数组(128位),然后再对这个二进制数组进行base64编码(而不是对32位字符串编码)。

例如,用Python计算0123456789的Content-MD5,主要代码如下:

import base64, hashlib
hash = hashlib.md5()
hash.update("0123456789")
base64.b64encode(hash.digest())

这样就生成了 'eB5eJF1ptWaXm4bijSPyxw==' 的Content-MD5值

2、接着,实际上如何获取文件的Content-MD5值呢,下面有两种不同的写法,建议用第一种,不知道为啥实际调试的时候,用第一种可以的时候,用第二种不可以,因为是不同人写的代码,估计调用的时候方式不一样:

(1)、第一种写法

import hashlib, base64
 
def content_encoding(path: str):
  """
  文件转 bytes 加密并使用 base64 编码
  :param path: 文件路径
  :return: 返回加密编码后的字符串
  """
  with open(path, 'rb') as f:
    content = f.read()
  content_md5 = hashlib.md5()
  content_md5.update(content)
  content_base64 = base64.b64encode(content_md5.digest())
  return content_base64.decode("utf-8")

(2)、第二种写法:

import hashlib, base64
 
def match(file_path, Bytes=1024):
  """
  先计算文件md5值,在对该md5值进行base64编码
  :param file_path: 文件路径
  :param Bytes: 字节大小
  :return:
  """
  try:
    md5_1 = hashlib.md5() # 创建一个md5算法对象
    with open(file_path, 'rb') as f: # 打开一个文件,必须是'rb'模式打开
      while 1:
        data = f.read(Bytes) # 由于是一个文件,每次只读取固定字节
        if data: # 当读取内容不为空时对读取内容进行update
          md5_1.update(data)
        else: # 当整个文件读完之后停止update
          break
    f.close()
    ret = base64.b64encode(bytes(md5_1.digest())) # 获取这个文件的MD5值
    ret = ret.decode('ascii') # 去掉前面的b'
    return ret
  except Exception as e:
    print(e)
    return ''

补充知识:Python之文件处理-批量修改md文档内容

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
import re
import time
 
def modify_md_content(top):
  for root, dirs, files in os.walk(top, topdown=False):
    # 循环文件
    for file_name in files:
      file_name_split = file_name.split('.')
 
      try:
        if file_name_split[-1] == 'md':
          # 找到md文件并且复制一份md文件路径
          md_file_path = os.path.join(root, '.'.join(file_name_split))
          copy_md_file_path = os.path.join(root, '.'.join([f'{file_name_split[0]}_copy', file_name_split[1]]))
 
          # 打开md文件然后进行替换
          with open(md_file_path, 'r', encoding='utf8') as fr, \
              open(copy_md_file_path, 'w', encoding='utf8') as fw:
            data = fr.read()
            # data = re.sub('\(/配图/', '(配图/', data)
            # data = re.sub('<br>', '<br>\n', data)
            # data = re.sub('<br>', '', data)
            data = re.sub('^ #.*? ', '', data)
 
            fw.write(data) # 新文件一次性写入原文件内容
            # fw.flush()
 
          # 删除原文件
          os.remove(md_file_path)
          # 重命名新文件名为原文件名
          os.rename(copy_md_file_path, md_file_path)
          print(f'{md_file_path} done...')
          time.sleep(0.5)
      except FileNotFoundError as e:
        print(e)
    time.sleep(0.5)
 
 
if __name__ == '__main__':
  top = r'/Users/mac/Desktop/'
  modify_md_content(top)

以上这篇python计算Content-MD5并获取文件的Content-MD5值方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python进行稳定可靠的文件操作详解
Dec 31 Python
Python xlrd读取excel日期类型的2种方法
Apr 28 Python
Python OS模块常用函数说明
May 23 Python
python目录与文件名操作例子
Aug 28 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
pandas 将索引值相加的方法
Nov 15 Python
Python设计模式之外观模式实例详解
Jan 17 Python
python [:3] 实现提取数组中的数
Nov 27 Python
Jmeter HTTPS接口测试证书导入过程图解
Jul 22 Python
Python 按比例获取样本数据或执行任务的实现代码
Dec 03 Python
Python类型转换的魔术方法详解
Dec 23 Python
Django自定义列表 models字段显示方式
Apr 03 #Python
使用Django清空数据库并重新生成
Apr 03 #Python
Python基础类继承重写实现原理解析
Apr 03 #Python
Django实现列表页商品数据返回教程
Apr 03 #Python
Python第三方库的几种安装方式(小结)
Apr 03 #Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 #Python
pip install 使用国内镜像的方法示例
Apr 03 #Python
You might like
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
php如何获取Http请求
2020/04/30 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
详解JavaScript执行模型
2020/11/16 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
python 获取et和excel的版本号
2009/04/09 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
对pandas中Series的map函数详解
2018/07/25 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
深入了解Django View(视图系统)
2019/07/23 Python
详解Python打包分发工具setuptools
2019/08/05 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
平面设计师岗位职责
2014/09/18 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
村党组织公开承诺书
2015/04/30 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技
MySQL添加索引特点及优化问题
2022/07/23 MySQL