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中MYSQLdb出现乱码的解决方法
Oct 11 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
详解使用python crontab设置linux定时任务
Dec 08 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
python与caffe改变通道顺序的方法
Aug 04 Python
python 使用值来排序一个字典的方法
Nov 16 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
NumPy统计函数的实现方法
Jan 21 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 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
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
用php+ajax新建流程(请假、进货、出货等)
2017/06/11 PHP
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
python标准算法实现数组全排列的方法
2015/03/17 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
python重试装饰器的简单实现方法
2019/01/31 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
Python基于QQ邮箱实现SSL发送
2020/04/26 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
六道php面试题附答案
2014/06/05 面试题
安全教育心得体会
2013/12/29 职场文书
优秀员工年终发言演讲稿
2014/01/01 职场文书
小学毕业家长寄语
2014/01/19 职场文书
入党自我评价优缺点
2014/01/25 职场文书
如何撰写岗位职责
2014/02/01 职场文书
中学生思想品德评语
2014/12/31 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
Python turtle实现贪吃蛇游戏
2021/06/18 Python
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android