基本概念
MD5,全名Message Digest Algorithm 5 ,中文名为消息摘要算法第五版,为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
主要是通过特定的hash散列方法将文本信息转换成简短的信息摘要,压缩+加密+hash算法的结合体,是绝对不可逆的。
- 不同消息(文件)的MD5码不一样,所以经常用来检验文件是否被修改过。
使用MD5加密消息和字符串(python)
其中使用到的文本和大的文件请自行准备,然后替换测试代码中的目录哦
#coding=utf-8
import hashlib
""" MD5加密算法,返回32位小写16进制符号 """
def md5hex(word):
if isinstance(word, unicode):
word = word.encode("utf-8")
elif not isinstance(word, str):
word = str(word)
m = hashlib.md5()
m.update(word)
return m.hexdigest()
'''MD5加密文件'''
def md5_file(name):
m =hashlib.md5()
a_file = open(name, 'rb') #需要使用二进制格式读取文件内容
m.update(a_file.read())
a_file.close()
return m.hexdigest()
'''加密大的文件'''
def MD5ForBigFile(file):
m = hashlib.md5()
f = open(file, 'rb')
buffer = 8192
while 1:
chunk = f.read(buffer)
if not chunk : break
m.update(chunk)
f.close()
return m.hexdigest()
strMD5=md5hex('abc')
fileMD5=md5_file('C:/Users/admin/Desktop/test.txt')
bigFileMD5=MD5ForBigFile('C:/adt.zip')
print('MD5: '+strMD5)
print('fileMD5: '+fileMD5)
print('bigFileMD5: '+bigFileMD5)
MD5原理
如果你还想看MD5原理的话,请继续往下看吧
MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
第一步、填充
如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448。填充的方法是填充一个1和n个0。填充完后,信息的长度就为N*512+448(bit);
第二步、记录信息长度
用64位来存储填充前信息长度。这64位加在第一步结果的后面,这样信息长度就变为N*512+448+64=(N+1)*512位。