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实现文件大小输出
Jan 11 Python
深入了解Python数据类型之列表
Jun 24 Python
python中子类继承父类的__init__方法实例
Dec 15 Python
Python数据结构之单链表详解
Sep 12 Python
Python生成8位随机字符串的方法分析
Dec 05 Python
python3中zip()函数使用详解
Jun 29 Python
Python常用数据类型之间的转换总结
Sep 06 Python
如何更改 pandas dataframe 中两列的位置
Dec 27 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
如何用Python绘制3D柱形图
Sep 16 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 Python
python自然语言处理之字典树知识总结
Apr 25 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
javascript 小型动画组件与实现代码
2010/06/02 PHP
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
Expandable &quot;Detail&quot; Table Rows
2007/08/29 Javascript
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
详解javascript设计模式三:代理模式
2019/03/25 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
node后端服务保活的实现
2019/11/10 Javascript
python中装饰器级连的使用方法示例
2017/09/29 Python
Python常见排序操作示例【字典、列表、指定元素等】
2018/08/15 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
python提取xml里面的链接源码详解
2019/10/15 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
python中get和post有什么区别
2020/06/19 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
空指针到底是什么
2012/08/07 面试题
伦敦奥运会口号
2014/06/13 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
工厂采购员岗位职责
2015/04/07 职场文书