什么是 MD5
Posted on Wed, 25 Dec 2024 10:33:40 +0800 by LiangMingJian
MD5 的概述
MD5,Message-Digest Algorithm 5,信息摘要算法 5,是一种被广泛使用的密码散列函数算法。MD5 将给定的原数据进行散列处理,然后生成一个 128 位(16 字节)的散列值(Hash),用来确保信息传输过程中的安全和完整。
MD5 的特点
- 压缩性:任意长度的数据,经过 MD5 算法处理后,都会生成一个固定长度的 128 位散列值。
- 容易计算:从原数据计算出 MD5 值非常容易。
- 抗修改性:对原数据进行任何改动,哪怕只修改 1 个字节,所得到的 MD5 值都会有很大区别。
- 弱抗碰撞:即使拥有原数据和其对应的 MD5 值,但想找到一个具有相同 MD5 值的数据是几乎不可能的。
- 强抗碰撞:想找到两个不同的数据,使它们具有相同的 MD5 值,也是几乎不可能的。
注意,MD5 无法完全防止碰撞,上述的弱抗碰撞和强抗碰撞所指的几乎不可能描述的是只是概览低,但并不是零概率,即,想找到两个不同的数据,使它们具有相同的 MD5 值的概率很小,但并不是完全不可能。
MD5 的应用
- 密码存储:在数据库中存储密码时,存储密码的 MD5 值而不是明文密码,来保证密码的安全性。
- 数字签名:对文件进行 MD5 计算,可以生成文件的指纹,可以在文件传输后用于验证文件的完整性,避免文件被修改或下载不完整。
- 防止数据篡改:在通信过程中,对发送的信息进行 MD5 计算,可以通过比较发送前后的 MD5 值,避免数据被篡改。
MD5 的 Python 实现
在 Python 中,可以通过 hashlib 库来实现 MD5 值的计算。
import hashlib
def md5_string(data: str):
md5_hash = hashlib.md5()
md5_hash.update(data.encode('utf-8'))
return md5_hash.hexdigest()
def md5_file(file_path: str):
md5_hash = hashlib.md5()
with open(file_path, 'rb') as f:
for chunk in iter(lambda: f.read(4096), b''):
md5_hash.update(chunk)
return md5_hash.hexdigest()
print(f"MD5: {md5_string('Hello Python')}")
# MD5: a709c173220d6185d12248faa9f40ac8
print(f"MD5: {md5_file('1.txt')}")
# MD5: e10adc3949ba59abbe56e057f20f883e
MD5 的 Windows 使用
在 Windows 系统中,可以用 PowerShell 的 Get-FileHash 命令来计算文件的 MD5 值。
Get-FileHash 1.txt -Algorithm MD5
# Algorithm Hash Path
# --------- ---- ----
# MD5 E10ADC3949BA59ABBE56E057F20F883E F:\MyPython\PythonProject313\1.txt
MD5 的 Linux 使用
在 Linux 系统中,可以使用 md5sum 命令来计算文件的 MD5 值。
md5sum README.txt
# 7ae60f934ac65b0386316aed67150b45 README.txt