莫度编程网

技术文章干货、编程学习教程与开发工具分享

Python密码存储黑科技!3行代码让用户密码坚不可摧

刚入门的你是不是还在用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

效果:相同密码,不同哈希值!

盐值三原则

  1. 随机生成(不要用时间戳等伪随机)
  2. 足够长(至少16个字符)
  3. 每个用户独立(绝不重复使用)

三、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个准则

  1. 绝不存明文
  2. 强制复杂密码
  3. 定期更新算法
  4. 二次验证

密码安全就像给家门上锁,别让黑客有可乘之机!转发本文到学习群,和小伙伴一起守护代码安全吧!欢迎在评论区留言,我会解答所有新手疑问!

<script type="text/javascript" src="//mp.toutiao.com/mp/agw/mass_profit/pc_product_promotions_js?item_id=7507056118248161801"></script>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言

    Powered By Z-BlogPHP 1.7.4

    蜀ICP备2024111239号-43