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 23 Python
Python使用logging结合decorator模式实现优化日志输出的方法
Apr 16 Python
实现python版本的按任意键继续/退出
Sep 26 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
python2.7到3.x迁移指南
Feb 01 Python
python实现学生信息管理系统
Apr 05 Python
python对excel文档去重及求和的实例
Apr 18 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
Python Pillow Image Invert
Jan 22 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 Python
python如何修改文件时间属性
Feb 05 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/08/06 PHP
PHP防CC攻击实现代码
2011/12/29 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
浅谈webpack-dev-server的配置和使用
2018/05/17 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
python导入库的具体方法
2020/06/18 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
英文翻译的自我评价语句
2013/10/04 职场文书
管理心得体会
2013/12/28 职场文书
岳父生日宴会答谢词
2014/01/13 职场文书
法语专业求职信
2014/07/20 职场文书
个人剖析材料范文
2014/09/30 职场文书
个人存款证明书
2014/10/18 职场文书
单位考核鉴定意见
2015/06/05 职场文书
教师理论学习心得体会
2016/01/21 职场文书
Redis读写分离搭建的完整步骤
2021/09/14 Redis