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中的readline()方法的使用
May 24 Python
使用Python脚本和ADB命令实现卸载App
Feb 10 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
python 画三维图像 曲面图和散点图的示例
Dec 29 Python
python快排算法详解
Mar 04 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
python config文件的读写操作示例
Sep 27 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
python将音频进行变速的操作方法
Apr 08 Python
使用Python判断一个文件是否被占用的方法教程
Dec 16 Python
python3使用diagrams绘制架构图的步骤
Apr 08 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/04/18 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
div移动 输入框不能输入的问题
2009/11/19 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
JS window对象简单操作完整示例
2020/01/14 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
python 接口返回的json字符串实例
2018/03/27 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
劳资员岗位职责
2013/11/11 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
入党推优材料
2014/06/02 职场文书
大学生实习证明范本
2014/09/19 职场文书
班主任工作实习计划
2015/01/16 职场文书
Python使用openpyxl批量处理数据
2021/06/23 Python
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server