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操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
python之wxPython菜单使用详解
Sep 28 Python
python自动化测试之连接几组测试包实例
Sep 28 Python
python对json的相关操作实例详解
Jan 04 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
Python数组并集交集补集代码实例
Feb 18 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
Python编写nmap扫描工具
Jul 21 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自动重命名文件实现方法
2014/11/04 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
jQuery操作cookie
2016/08/08 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
从零学Python之入门(二)基本数据类型
2014/05/25 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
python访问hdfs的操作
2020/06/06 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
高三毕业生自我鉴定
2013/12/20 职场文书
战友聚会邀请函
2014/01/18 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
留学顾问岗位职责
2014/04/14 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
2014年法务工作总结
2014/12/11 职场文书
创先争优承诺书
2015/01/20 职场文书
学生会辞职信
2015/03/02 职场文书
python turtle绘制多边形和跳跃和改变速度特效
2022/03/16 Python
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫