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使用Nginx和uWSGI来运行Python应用
Jan 09 Python
python使用matplotlib模块绘制多条折线图、散点图
Apr 26 Python
Python线程池模块ThreadPoolExecutor用法分析
Dec 28 Python
Django REST framework视图的用法
Jan 16 Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 Python
基于python的Paxos算法实现
Jul 03 Python
解决django 新增加用户信息出现错误的问题
Jul 28 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
python 遍历pd.Series的index和value
Nov 26 Python
python实现名片管理器的示例代码
Dec 17 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 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 进度条实现代码
2009/03/10 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
PHP原生函数一定好吗?
2014/12/08 PHP
javascript 动态生成私有变量访问器
2009/12/06 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
Python3.2中的字符串函数学习总结
2015/04/23 Python
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
django ORM之values和annotate使用详解
2020/05/19 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
什么是Smart Navigation?
2016/07/03 面试题
社团成立邀请函
2014/01/08 职场文书
上班睡觉检讨书
2014/01/09 职场文书
单位租房协议书范本
2014/12/04 职场文书
雷锋电影观后感
2015/06/10 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
人民币使用说明书
2019/04/17 职场文书
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS