python如何计算Content-MD5并获取文件的Content-MD5值

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 ''

3、以上内容仅供学习参考,谢谢!

发布了276 篇原创文章 · 获赞 200 · 访问量 72万+

猜你喜欢

转载自blog.csdn.net/u012561176/article/details/104021413