python計算Content-MD5並獲取檔案的Content-MD5值方式
阿新 • • 發佈:2020-04-07
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('^ #.*? ',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值方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。