本文目录导读:

我来介绍几种在Python中实现MD5加密的方法。
方法1:使用hashlib库(推荐)
import hashlib
# 基本用法
def md5_basic(text):
"""MD5基本加密"""
md5 = hashlib.md5()
md5.update(text.encode('utf-8'))
return md5.hexdigest()
# 一行代码实现
def md5_simple(text):
"""一行代码实现MD5"""
return hashlib.md5(text.encode('utf-8')).hexdigest()
# 测试
text = "Hello, World!"
print(f"原始字符串: {text}")
print(f"MD5值: {md5_basic(text)}")
print(f"MD5值(一行): {md5_simple(text)}")
方法2:处理大文件的MD5加密
import hashlib
def md5_file(filename, chunk_size=8192):
"""计算文件的MD5值,适用于大文件"""
md5 = hashlib.md5()
try:
with open(filename, 'rb') as f:
while True:
chunk = f.read(chunk_size)
if not chunk:
break
md5.update(chunk)
return md5.hexdigest()
except FileNotFoundError:
return f"文件 {filename} 不存在"
except Exception as e:
return f"读取文件出错: {e}"
# 测试使用
# file_md5 = md5_file('example.txt')
# print(f"文件MD5: {file_md5}")
方法3:带盐值的MD5加密
import hashlib
import os
def md5_with_salt(password, salt=None):
"""
带盐值的MD5加密
salt: 盐值,如果不提供则自动生成
"""
if salt is None:
salt = os.urandom(16).hex() # 生成随机盐值
# 密码 + 盐值 混合后加密
hash_obj = hashlib.md5()
hash_obj.update((password + salt).encode('utf-8'))
hashed = hash_obj.hexdigest()
return f"{salt}${hashed}"
def verify_md5_with_salt(password, stored_hash):
"""验证带盐值的MD5"""
try:
salt, hashed = stored_hash.split('$')
return md5_with_salt(password, salt) == stored_hash
except ValueError:
return False
# 测试
password = "my_password123"
stored = md5_with_salt(password)
print(f"原始密码: {password}")
print(f"加密结果: {stored}")
# 验证
is_valid = verify_md5_with_salt("my_password123", stored)
print(f"密码验证: {is_valid}")
is_valid = verify_md5_with_salt("wrong_password", stored)
print(f"错误密码验证: {is_valid}")
方法4:批量MD5加密
import hashlib
import json
class MD5Encryptor:
"""MD5加密工具类"""
@staticmethod
def encrypt(text):
"""单字符串加密"""
return hashlib.md5(text.encode('utf-8')).hexdigest()
@staticmethod
def encrypt_batch(text_list):
"""批量加密"""
results = {}
for text in text_list:
results[text] = hashlib.md5(text.encode('utf-8')).hexdigest()
return results
@staticmethod
def encrypt_dict(data_dict):
"""加密字典中的所有字符串值"""
encrypted = {}
for key, value in data_dict.items():
if isinstance(value, str):
encrypted[key] = hashlib.md5(value.encode('utf-8')).hexdigest()
else:
encrypted[key] = value
return encrypted
# 使用示例
encryptor = MD5Encryptor()
# 批量加密
texts = ["hello", "world", "python", "md5"]
results = encryptor.encrypt_batch(texts)
print("批量加密结果:")
for text, md5_value in results.items():
print(f" {text}: {md5_value}")
# 字典加密
user_data = {
"username": "admin",
"password": "123456",
"age": 25,
"email": "admin@example.com"
}
encrypted_data = encryptor.encrypt_dict(user_data)
print("\n字典加密结果:")
print(json.dumps(encrypted_data, indent=2))
方法5:比较两个字符串的MD5
import hashlib
def compare_md5(text1, text2):
"""比较两个字符串的MD5值是否相同"""
md5_1 = hashlib.md5(text1.encode('utf-8')).hexdigest()
md5_2 = hashlib.md5(text2.encode('utf-8')).hexdigest()
print(f"'{text1}'的MD5: {md5_1}")
print(f"'{text2}'的MD5: {md5_2}")
if md5_1 == md5_2:
print("两个字符串的MD5值相同")
return True
else:
print("两个字符串的MD5值不同")
return False
# 测试
compare_md5("Hello", "Hello") # 相同
print("---")
compare_md5("Hello", "hello") # 不同(大小写敏感)
完整示例:用户密码管理系统
import hashlib
import os
class UserPasswordManager:
"""用户密码管理系统"""
def __init__(self):
self.users = {} # 存储用户名和加密密码
def register(self, username, password):
"""用户注册"""
if username in self.users:
return False, "用户名已存在"
# 生成盐值
salt = os.urandom(16).hex()
# 创建MD5对象并加密
md5 = hashlib.md5()
md5.update((password + salt).encode('utf-8'))
hashed_password = md5.hexdigest()
# 存储用户信息
self.users[username] = {
'salt': salt,
'password': hashed_password
}
return True, "注册成功"
def login(self, username, password):
"""用户登录验证"""
if username not in self.users:
return False, "用户名不存在"
user = self.users[username]
# 使用相同的盐值加密密码
md5 = hashlib.md5()
md5.update((password + user['salt']).encode('utf-8'))
hashed_password = md5.hexdigest()
# 验证密码
if hashed_password == user['password']:
return True, f"{username}登录成功"
else:
return False, "密码错误"
def list_users(self):
"""列出所有用户"""
return list(self.users.keys())
# 使用示例
def demo():
manager = UserPasswordManager()
# 注册用户
print("=== 用户注册 ===")
result, msg = manager.register("alice", "password123")
print(f"注册alice: {msg}")
result, msg = manager.register("bob", "secure_pass")
print(f"注册bob: {msg}")
# 尝试注册重复用户名
result, msg = manager.register("alice", "new_password")
print(f"重复注册alice: {msg}")
print(f"\n当前用户: {manager.list_users()}")
# 登录测试
print("\n=== 用户登录 ===")
result, msg = manager.login("alice", "password123")
print(f"alice正确密码登录: {msg}")
result, msg = manager.login("alice", "wrong_password")
print(f"alice错误密码登录: {msg}")
result, msg = manager.login("charlie", "password123")
print(f"不存在的用户登录: {msg}")
if __name__ == "__main__":
demo()
注意事项
- 安全性:MD5已经被认为不够安全,不建议用于密码存储,建议使用SHA-256或bcrypt
- 编码问题:加密前需要将字符串转换为字节,指定编码格式
- 大小写敏感:MD5加密默认大小写敏感
- 盐值使用:为了增加安全性,建议使用盐值
输出示例
运行上述代码,你会看到类似这样的输出:
原始字符串: Hello, World!
MD5值: 65a8e27d8879283831b664bd8b7f0ad4
带盐值加密结果: a8f5f167f44f4964e6c998d13e1c6e5b$e99a18c428cb38d5f260853678922e03
批量加密结果:
hello: 5d41402abc4b2a76b9719d911017c592
world: 7d793037a0760186574b0282f2f435e7
希望这些案例能帮助你理解如何在Python中实现MD5加密!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播