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函数中的函数(闭包)用法实例
Mar 15 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
python os用法总结
Jun 08 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
Aug 25 Python
Python实现分段线性插值
Dec 17 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
写好Python代码的几条重要技巧
May 21 Python
变长双向rnn的正确使用姿势教学
May 31 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数组键值用法实例分析
2015/02/27 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
javascript执行环境及作用域详解
2016/05/05 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
Django URL传递参数的方法总结
2016/08/28 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
高分子材料个人求职信范文
2013/09/25 职场文书
创业计划书六个要素
2013/12/26 职场文书
班组安全员工作职责
2014/02/01 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
项目采购员岗位职责
2014/04/15 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python