速通python加密之MD5加密
MD5
MD5加密是一种广泛使用的密码散列函数,全称为Message-Digest Algorithm 5(消息摘要算法第5版),由罗纳德·李维斯特设计,于1992年公开。其核心功能是将任意长度的输入数据(如文本、文件等)转换为一个固定长度(128位,通常表示为32个十六进制字符)的输出,这个输出被称为MD5哈希值或消息摘要。
MD5加密的核心特点:
-
固定输出长度
无论输入数据是1字节还是1GB,输出的MD5值均为32位十六进制字符串(如d41d8cd98f00b204e9800998ecf8427e
是空字符串的MD5值)。 -
不可逆性
理论上,无法从MD5哈希值反推原始输入数据(因为哈希过程是单向的,且多个输入可能对应同一输出,即“哈希碰撞”)。 -
抗修改性
原始数据哪怕只有微小改动(如一个字符的变化),生成的MD5值也会截然不同,可用于校验数据完整性(如文件传输后验证是否被篡改)。
应用场景(过去与现在):
- 历史用途:曾用于密码存储(将用户密码加密为MD5值后保存,避免明文泄露)、文件校验(如软件安装包的MD5校验码)、数字签名辅助等。
- 现状:由于存在哈希碰撞漏洞(即不同输入可生成相同MD5值,已被数学证明并实际演示),其安全性已被否定,目前不再推荐用于密码存储、金融等安全敏感场景,逐渐被SHA-256等更安全的算法替代。
示例:
"""
@File :00MD5.py
@Editor : 百年
"""
'''
md5本身不是一种加密算法,而是摘要算法,其是不可逆的'''#导入需要的包
from hashlib import md5#step1:创建一个加密对象
# obj = md5()# tips:为了防止撞库,MD5创建阶段可以进行加盐
obj = md5(b'weixiaozaimeizaitianbushinidedoubutebie')#step2:给加密对象增加内容,字符串必须在哈希前进行编码
# 其实说白了就是加密的必须是字节
obj.update("hello , aloha".encode('utf-8'))obj.update('yes,i am ironman'.encode('utf-8'))#step3:看结果,往往会导出32位的16进制数字
result = obj.hexdigest()print(result)
# ce83402ae45ff730cefa39de5f7279d5