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只用40行代码编写的计算器实例
May 10 Python
Python实现感知器模型、两层神经网络
Dec 19 Python
对numpy中数组元素的统一赋值实例
Apr 04 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
python模拟点击网页按钮实现方法
Feb 25 Python
python matplotlib包图像配色方案分享
Mar 14 Python
Python selenium模块实现定位过程解析
Jul 09 Python
Python3+selenium配置常见报错解决方案
Aug 28 Python
python实现扫雷游戏的示例
Oct 20 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
第八节--访问方式
2006/11/16 PHP
PHP删除数组中的特定元素的代码
2012/06/28 PHP
php自定义apk安装包实例
2014/10/20 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
Javascript 跨域访问解决方案
2009/02/14 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
javascript获取web应用根目录的方法
2014/02/12 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
[00:32]2018DOTA2亚洲邀请赛iG出场
2018/04/03 DOTA
python中subprocess批量执行linux命令
2018/04/27 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
Python的两道面试题
2013/06/29 面试题
员工年终演讲稿
2014/01/03 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
安全生产月演讲稿
2014/05/09 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
销售会议开幕词
2015/01/28 职场文书
家长高考寄语
2015/02/27 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书