摘要:刚入门的你是不是还在用123456当密码?别让用户的隐私裸奔!今天用最通俗的方式,教你用Python给密码穿上"防弹衣",新手也能10分钟上手!
刚入门的你是不是还在用123456当密码?别让用户的隐私裸奔!今天用最通俗的方式,教你用Python给密码穿上"防弹衣",新手也能10分钟上手!
1、危险操作:直接存明文密码
# 错误示范!千万别这样存密码!user_password = "123456" # 直接存明文,黑客笑开花数据库一旦被黑,所有用户隐私直接暴露!
2、普通哈希也不安全
# 看似安全,实则隐患import hashlibhashed = hashlib.md5("mypassword".encode).hexdigest黑客用"彩虹表"(密码字典)能瞬间破解简单密码相同密码哈希值一样,一破全破!什么是盐?
就像炒菜加盐调味,我们给每个密码加随机字符串示例:
用户A密码123456 → 加盐x7!pK → 哈希值abc123用户B密码123456 → 加盐q9@zY → 哈希值xyz789效果:相同密码,不同哈希值!
第1步:安装安全库
pip install bcrypt # 推荐新手使用第2步:加密密码(示例)
import bcrypt# 用户注册时调用def save_password(password): salt = bcrypt.gensalt # ① 生成随机盐 hashed = bcrypt.hashpw(password.encode, salt) # ② 加密 print("加密结果:", hashed.decode)save_password("mypassword123")# 输出示例(每次加密 结果不同):# 加密结果: $2b$12$80iA6VIgYGP8NE6Kb/NxPeFU61ykACnzKvurVbmoO.zFrqwToPsyS第3步:验证密码(用户登录时)
import bcryptdef check_password(input_pwd, hashed_from_db): # 把用户输入的密码和数据库存的哈希值对比 return bcrypt.checkpw(input_pwd.encode, hashed_from_db)# 模拟验证过程# 假设从数据库读取stored_hash = b'$2b$12$80iA6VIgYGP8NE6Kb/NxPeFU61ykACnzKvurVbmoO.zFrqwToPsyS' print(check_password("mypassword123", stored_hash)) # 返回Trueprint(check_password("wrongpass", stored_hash)) # 返回False四、新手常见问题Q1:代码中的b'...'是什么?
这是字节类型(bytes),密码操作必须用字节数据
password.encode # 字符串转字节hashed.decode # 字节转字符串(方便存储)Q2:盐值需要自己存吗?
不需要!bcrypt生成的哈希值自动包含盐值
Q3:选bcrypt还是Argon2?
密码安全就像给家门上锁,别让黑客有可乘之机!转发本文到学习群,和小伙伴一起守护代码安全吧!欢迎在评论区留言,我会解答所有新手疑问!
来源:信息科技云课堂