刚入门的你是不是还在用123456当密码?别让用户的隐私裸奔!今天用最通俗的方式,教你用Python给密码穿上"防弹衣",新手也能10分钟上手!
一、密码为什么要穿"防弹衣"?
1、危险操作:直接存明文密码
# 错误示范!千万别这样存密码!
user_password = "123456" # 直接存明文,黑客笑开花
数据库一旦被黑,所有用户隐私直接暴露!
2、普通哈希也不安全
# 看似安全,实则隐患
import hashlib
hashed = hashlib.md5("mypassword".encode()).hexdigest()
- 黑客用"彩虹表"(密码字典)能瞬间破解简单密码
- 相同密码哈希值一样,一破全破!
二、给密码加把盐(Salt)
什么是盐?
- 就像炒菜加盐调味,我们给每个密码加随机字符串
示例:
- 用户A密码123456 → 加盐x7!pK → 哈希值abc123
- 用户B密码123456 → 加盐q9@zY → 哈希值xyz789
效果:相同密码,不同哈希值!
盐值三原则
- 随机生成(不要用时间戳等伪随机)
- 足够长(至少16个字符)
- 每个用户独立(绝不重复使用)
三、Python实战:3行代码护体
第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 bcrypt
def 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)) # 返回True
print(check_password("wrongpass", stored_hash)) # 返回False
四、新手常见问题
Q1:代码中的b'...'是什么?
这是字节类型(bytes),密码操作必须用字节数据
password.encode() # 字符串转字节
hashed.decode() # 字节转字符串(方便存储)
Q2:盐值需要自己存吗?
不需要!bcrypt生成的哈希值自动包含盐值
Q3:选bcrypt还是Argon2?
新手先用bcrypt,简单够用
五、安全密码的4个准则
- 绝不存明文
- 强制复杂密码
- 定期更新算法
- 二次验证
密码安全就像给家门上锁,别让黑客有可乘之机!转发本文到学习群,和小伙伴一起守护代码安全吧!欢迎在评论区留言,我会解答所有新手疑问!
<script type="text/javascript" src="//mp.toutiao.com/mp/agw/mass_profit/pc_product_promotions_js?item_id=7507056118248161801"></script>