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实现一个简单的能够上传下载的HTTP服务器
May 05 Python
Python中内建函数的简单用法说明
May 05 Python
Python面向对象编程基础解析(二)
Oct 26 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
python Pandas 读取txt表格的实例
Apr 29 Python
python远程连接服务器MySQL数据库
Jul 02 Python
Python 确定多项式拟合/回归的阶数实例
Dec 29 Python
python匿名函数用法实例分析
Aug 03 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 Python
Jupyter安装链接aconda实现过程图解
Nov 02 Python
利用Python发送邮件或发带附件的邮件
Nov 12 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
swfupload 多文件上传实现代码
2008/08/27 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
js实现搜索栏效果
2018/11/16 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
多页vue应用的单页面打包方法(内含打包模式的应用)
2020/06/11 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
python创建和删除目录的方法
2015/04/29 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
利用Python获取操作系统信息实例
2016/09/02 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
基于Python中的yield表达式介绍
2019/11/19 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
python动态规划算法实例详解
2020/11/22 Python
详解Python中openpyxl模块基本用法
2021/02/23 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
爸爸的花儿落了教学反思
2014/02/20 职场文书
电气工程自动化求职信
2014/03/14 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
委托收款证明
2015/06/23 职场文书
MySQL Shell的介绍以及安装
2021/04/24 MySQL