工作中用到了MD5值来进行对文件校验,MD5本身就是一个很出色的算法,一定程度上解决了hash散列的冲突,关于MD5的内容网上也有很多,这里只要是进行一个实验,验证一下文件校验方面的工作,因为习惯使用了python来完成这样的任务,这里也是使用python,了解到python本身自带有hashlib模块,该模块中就包含了所需的MD5方法,当然python也有专门的MD5模块可以使用,使用得当发的大同小异,但是个人觉得hashlib模块更好用一些,今天就使用python的os、commands还有hashlib三个模块来进行实验,其中,前两个模块主要是为了可以在python脚本中执行Linux的shell命令,以此来验证一下同一个文件以及文件内容是否可以得到与hashlib模块MD5方法相同的MD5值,好了不多说了,下面是程序,很简单的一个验证,里面都有详细的注释就不多解释了:
#!/usr/bin/env python# -*- coding: utf-8 -*-'''功能:校验文件MD5值'''import hashlib, binasciiimport md5import osimport commands#使用python自带的hashlib库def get_md5_value(str): my_md5 = hashlib.md5()#获取一个MD5的加密算法对象 my_md5.update(str) #得到MD5消息摘要 my_md5_Digest = my_md5.hexdigest()#以16进制返回消息摘要,32位 return my_md5_Digest#使用python自带的hashlib库如果m.update(a)之后在 m.update(b),那么就相当于m.update(a+b),这里验证一下def get_md5_value_two(str1, str2): my_md52 = hashlib.md5() my_md52.update(str1) my_md52.update(str2) my_md52_Digest = my_md52.hexdigest() return my_md52_Digest#使用SHA1def get_sha1_value(str): my_sha = hashlib.sha1() my_sha.update(str) my_sha_Digest = my_sha.hexdigest() return my_sha_Digest
#利用os模块system()方法获取文件的MD5值 def get_file_md5_value(filename): return os.system('md5sum ' + filename + '|cut -f1') #利用os模块popen()方法获取文件的MD5值def get_popen_file_md5_value(filename): return os.popen('md5sum ' + filename + '|cut -f1')#获取文件内容的MD5值def get_file_content_md5_value(filename): fp = open(filename) fp_content = fp.read() return get_md5_value(fp_content)#利用commands模块获取文件的MD5值def get_commands_file_md5_value(filename): return commands.getoutput('md5sum ' + filename + '|cut -f1')
if __name__ == '__main__': string1 = 'We are friends!!!' string2 = 'Do agree with me?' filename = 'Linux.txt' result_md5_value = get_md5_value(string1) result_sha1_value = get_sha1_value(string1) print '-------------------------------------------------' print '原始字符串为:'+string1 print 'hashlib模块MD5值为:'+result_md5_value,len(result_md5_value) print 'SHA1值为:'+result_sha1_value,len(result_sha1_value) print '-------------------------------------------------' result_md5_value = get_md5_value(string2) result_sha1_value = get_sha1_value(string2) print '原始字符串为:'+string2 print 'hashlib模块MD5值为:'+result_md5_value,len(result_md5_value) print 'SHA1值为:'+result_sha1_value,len(result_sha1_value) print '----------------------验证---------------------------' result_md5_value = get_md5_value(string1+string2) result_sha1_value = get_sha1_value(string1+string2) print '原始字符串为:', string1+string2 print 'hashlib模块MD5值为:'+result_md5_value,len(result_md5_value) print 'SHA1值为:'+result_sha1_value,len(result_sha1_value) print '-----------------------整体MD5--------------------------' result_md52_value = get_md5_value_two(string1, string2) print '原始字符串为:', string1+string2 print 'hashlib模块MD5值为:'+result_md52_value,len(result_md52_value) print '****************************os模块获取文件的MD5值为*******************************************' result_file_value = get_file_md5_value(filename) print result_file_value result_popen_file_md5_value = get_popen_file_md5_value(filename) print result_popen_file_md5_value print '*****************************os模块获取文件内容的MD5值为******************************************' result_file_content_value = get_file_content_md5_value(filename) print result_file_content_value, len(result_file_content_value) print '*****************************commands模块获取文件的MD5值为******************************************' result_commands_file_md5_value = get_commands_file_md5_value(filename) print result_commands_file_md5_value, len(result_commands_file_md5_value)
新闻热点
疑难解答