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 lxml模块安装教程
Jun 02 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
Python数据结构与算法之列表(链表,linked list)简单实现
Oct 30 Python
python写一个md5解密器示例
Feb 23 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 Python
Django 使用logging打印日志的实例
Apr 28 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
Python中pyecharts安装及安装失败的解决方法
Feb 18 Python
Python-split()函数实例用法讲解
Dec 18 Python
深入理解python协程
Jun 15 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获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
javascript 精粹笔记
2010/05/09 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
javascript:FF/Chrome与IE动态加载元素的区别说明
2014/01/26 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
javascript实现unicode与ASCII相互转换的方法
2015/12/10 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
Vue.js添加组件操作示例
2018/06/13 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
小程序分享链接onShareAppMessage的具体用法
2020/05/22 Javascript
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
pandas多级分组实现排序的方法
2018/04/20 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
Django中URL的参数传递的实现
2019/08/04 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
西班牙高科技产品购物网站:MejorDeseo
2019/09/08 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
基层工作经历证明
2014/01/13 职场文书
平民服装店创业计划书
2014/01/17 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
村级换届选举方案
2014/05/10 职场文书
公司周年庆典策划方案
2014/05/17 职场文书
运动会拉拉队口号
2014/06/09 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
公司人事管理制度
2015/08/05 职场文书
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL