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解析并修改XML文档的方法
Oct 15 Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
Jan 20 Python
python操作mysql数据库
Mar 05 Python
Python中的默认参数实例分析
Jan 29 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
对python判断是否回文数的实例详解
Feb 08 Python
Python线程之定位与销毁的实现
Feb 17 Python
Python3+Appium安装使用教程
Jul 05 Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 Python
Python WSGI 规范简介
Apr 11 Python
利用Python实现Picgo图床工具
Nov 23 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
php flush类输出缓冲剖析
2008/10/19 PHP
php session 检测和注销
2009/03/16 PHP
PHP memcache扩展的三种安装方法
2009/04/26 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
js 判断 enter 事件
2009/02/12 Javascript
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
JavaScript计时器示例分析
2015/02/05 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
简单了解常用的JavaScript 库
2020/07/16 Javascript
python调用百度语音识别api
2018/08/30 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
python logging添加filter教程
2019/12/24 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
旅游管理专业个人求职信范文
2013/12/24 职场文书
25岁生日感言
2014/01/13 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏