方法如下 :
# -*- coding: UTF-8 -*-
######################################
import sys,os
import hashlib
import binascii
import time
######################################
Des_path = r'F:\flycony\Documents'
#1 生成md5 2 校验md5
type = 2
######################################
def main(path):
if type == 1 :
creat_md5_file(path)
elif type == 2 :
verify_md5_file(path)
def get_file_md5(file):
m = hashlib.md5()
with open(file, mode='rb') as f:
while True:
data = f.read(10240)
if not data:
break
m.update(data)
return m.hexdigest().upper()
def get_file_sha1(file):
m = hashlib.sha1()
with open(file, mode='rb') as f:
while True:
data = f.read(10240)
if not data:
break
m.update(data)
return m.hexdigest().upper()
def get_file_sha256(file):
m = hashlib.sha256()
with open(file, mode='rb') as f:
while True:
data = f.read(10240)
if not data:
break
m.update(data)
return m.hexdigest().upper()
def get_file_crc32(file):
blocksize = 1024 * 64
with open(file, mode='rb') as f:
crc = 0
while True:
data = f.read(blocksize)
if not data:
break
crc = binascii.crc32(data, crc)
return hex(crc)[2:].upper()
def get_file_mtime(file):
return time.ctime(os.stat(file).st_mtime)
def list_current_dir(path):
os.chdir(path)
dir_list = []
file_list = []
path_list=os.listdir(path)
for obj_name in path_list:
if os.path.isdir(obj_name):
dir_list.append(obj_name)
else:
file_list.append(obj_name)
return (file_list, dir_list)
def list_current_dir_allfile(path):
os.chdir(path)
dir_list = []
file_list = []
path_list=os.listdir(path)
for obj_name in path_list:
if os.path.isdir(obj_name):
dir_list.append(os.path.join(path, obj_name))
else:
file_list.append(os.path.join(path, obj_name))
if dir_list:
for obj in dir_list:
file_list = file_list + list_current_dir_allfile(obj)
return file_list
def creat_md5_file(path):
file_list = list_current_dir_allfile(path)
md5_path = path + '.md5'
if file_list:
for file in file_list:
file_md5 = get_file_md5(file)
print(file)
print('md5 : %s' % file_md5)
file_sha256 = get_file_sha256(file)
print('sha256 : %s' % file_sha256)
md5_file_name = file.replace(path, md5_path) + '.md5'
md5_file_path = os.path.dirname(md5_file_name)
if not os.path.exists(md5_file_path) :
os.makedirs(md5_file_path.encode("utf-8"))
with open(md5_file_name, mode= 'w') as f:
f.write(file_md5 + '\n' + file_sha256 + '\n')
def verify_md5_file(path):
file_list = list_current_dir_allfile(path)
md5_path = path + '.md5'
if file_list:
for file in file_list:
print(file)
md5_file_name = file.replace(path, md5_path) + '.md5'
md5_file_path = os.path.dirname(md5_file_name)
if not os.path.exists(md5_file_path) :
print('The md5 file is not exist !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
break
with open(md5_file_name, mode= 'r') as f:
file_md5_old = f.readline().strip()
file_sha256_old = f.readline().strip()
file_md5 = get_file_md5(file)
print('md5 : %s' % file_md5)
print('md5_original : %s' % file_md5_old)
file_sha256 = get_file_sha256(file)
print('sha256 : %s' % file_sha256)
print('sha256_original : %s' % file_sha256_old)
if file_md5 != file_md5_old or file_sha256 != file_sha256_old :
print('The file is damage !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
break
else:
print('verify pass !')
#file_path = r'F:\flycony\Downloads\3.00.20回传\USB\T8000-18 400G\版本\T8000-400.set'
#file_md5 = get_file_md5(file_path)
#file_sha1 = get_file_sha1(file_path)
#file_crc32 = get_file_crc32(file_path)
#file_mtime = get_file_mtime(file_path)
#file_sha256 = get_file_sha256(file_path)
#print(file_mtime)
#print(file_crc32)
#print(file_md5)
#print(file_sha1)
#print(file_sha256)
# ========================================================
main(Des_path)