## md5算法简介
1. **简介**
MD5消息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。
2. **用途**
* **一致性验证** 对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。
MD5可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。
* **数字签名** 对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。(数字证书)
* **安全访问认证** 密码加密存储
## Python中使用md5加密字符串
MD5是hash算法的一种。
# 导入hash算法库 import hashlib # 得到md5算法对象 hash_md5 = hashlib.md5() # 准备要计算md5的数据(bytes类型) data = '二进制数据'.encode('utf-8', errors='ignore') # 计算 hash_md5.update(data) # 获取计算结果(16进制字符串,32位字符) md5_str = hash_md5.hexdigest() # 打印结果 print(md5_str) ``` 注意: md5算法在使用时,数据可以分多次传递给update方法。所以,如下代码的结果,和上面相同: ```python # 导入hash算法库 import hashlib # 得到md5算法对象 hash_md5 = hashlib.md5() # 准备要计算md5的数据(bytes类型),第一部分 data1 = '二进制'.encode('utf-8', errors='ignore') # 计算第一部分数据 hash_md5.update(data1) # 准备要计算md5的数据(bytes类型),第二部分 data2 = '数据'.encode('utf-8', errors='ignore') # 计算第一部分数据 hash_md5.update(data2) # 获取计算结果(16进制字符串,32位字符) md5_str = hash_md5.hexdigest() # 打印结果 print(md5_str) ``` ## Python中使用md5算法获取文件MD5摘要 ```python # 导入hash算法库 import hashlib def file_md5sum(file_path): '''计算文件md5值''' # 得到md5算法对象 hash_md5 = hashlib.md5() # 文件分块读取 chunk_size = 4096 # 4096 字节(4KB) # 以二进制方式读文件 with open(file_path, "rb") as f: # 获取分块数据(bytes),一次读取 chunk_size 个字节 chunk = f.read(chunk_size) # 如果能读取到内容,就一直读取 while bool(chunk): # 应用MD5算法,计算 hash_md5.update(chunk) # 继续读 chunk = f.read(chunk_size) # 返回计算结果(16进制字符串,32位字符) return hash_md5.hexdigest() file_path = r'你的文件路径' # 改成自己的文件路径 file_md5_str = file_md5sum(file_path) # 计算给定路径的文件的md5 # 打印文件md5值 print(file_md5_str) # 打印文件md5值(大写) print(file_md5_str.upper())