Python计算Content-MD5及获取文件MD5值的方法
本文介绍如何在Python中计算Content-MD5值,核心步骤为先获取MD5二进制数组再进行Base64编码。文章提供了两种获取文件Content-MD5的代码实现方式,并附带批量修改MD文档内容的补充示例,帮助开发者快速掌握相关技巧。
Content-MD5计算原理
首先,需要计算MD5加密生成的二进制数组(长度为128位),随后对该二进制数组执行Base64编码操作。注意,这里是对二进制数据进行编码,而非对32位的十六进制字符串进行编码。
以Python计算字符串“0123456789”的Content-MD5为例,主要实现代码见下方。
字符串Content-MD5计算示例
import base64, hashlib
hash = hashlib.md5()
hash.update("0123456789")
base64.b64encode(hash.digest())
通过上述代码,最终生成的Content-MD5值为 'eB5eJF1ptWaXm4bijSPyxw=='。
接下来,探讨如何获取文件的Content-MD5值。文中提供了两种不同的代码写法,建议优先采用第一种方式。在实际调试过程中,可能会发现第一种方式有效而第二种方式无效,这通常是因为不同开发者编写的代码在调用方式上存在差异。
第一种实现方式如下所示。
文件Content-MD5获取方法
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")
第二种实现方式如下所示。
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文档内容。
批量修改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及获取文件MD5值的方法分享完毕,希望能为读者提供参考,并欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









