哈希加密bcrypt

本文介绍了如何使用Python的bcrypt库对密码进行加密(生成salt并hash)以及验证(通过checkpw)。展示了加密和解密的过程,确保密码安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import bcrypt

passwd = '123456'

# 密码加密
salt = bcrypt.gensalt(rounds=10)
hashed = bcrypt.hashpw(passwd.encode(), salt)

print(salt)
# b'$2b$12$BlfmESsgNnsQFCmpUnhDWO'

print(hashed)
# b'$2b$12$BlfmESsgNnsQFCmpUnhDWO2RbacoHJViT8AZR1qh3DDOHnZxB.J5q'

# 密码校验
ret = bcrypt.checkpw(passwd.encode(), hashed)

print(ret)  # True

### MySQL 数据库中哈希加密的查询方法与实现 在MySQL数据库中,为了保护敏感数据(如密码),通常会采用哈希算法对其进行加密存储。以下是几种常见的哈希加密实现方式及其查询方法。 #### 1. 使用 `PASSWORD()` 函数 `PASSWORD()` 是MySQL内置的一个函数,主要用于生成用于认证的哈希值。它适用于特定场景下的密码管理。 ```sql -- 插入一条带有 PASSWORD() 加密的记录 INSERT INTO users (username, password) VALUES ('john_doe', PASSWORD('secure_password')); -- 验证用户输入的密码是否匹配 SELECT * FROM users WHERE username = 'john_doe' AND PASSWORD('input_password') = password; ``` 需要注意的是,`PASSWORD()` 的具体实现可能因版本而异,在现代应用中并不推荐广泛使用[^1]。 #### 2. 使用 `SHA2()` 函数 `SHA2()` 提供了更强大的哈希算法支持,包括 SHA-256 和 SHA-512 等变体。这是目前较为推荐的一种方式。 ```sql -- 插入一条带有 SHA2() 加密的记录 INSERT INTO users (username, password) VALUES ('jane_smith', SHA2('another_secure_password', 256)); -- 验证用户输入的密码是否匹配 SELECT * FROM users WHERE username = 'jane_smith' AND SHA2('input_password', 256) = password; ``` 此方法的安全性较高,适合大多数应用场景[^1]。 #### 3. 使用 `MD5()` 函数 尽管 `MD5()` 曾经是一种流行的哈希算法,但由于其安全性较低,容易受到碰撞攻击,因此不再建议将其作为主要的密码存储方案。 ```sql -- 插入一条带有 MD5() 加密的记录 INSERT INTO table1 (user, pw) VALUES ('user1', MD5('password1')); -- 验证用户输入的密码是否匹配 SELECT * FROM table1 WHERE user = 'user1' AND MD5('input_password') = pw; ``` 虽然这种方法简单易用,但在实际生产环境中应谨慎考虑其安全性问题[^2]。 #### 4. 应用程序级别的加密 除了依赖于MySQL自身的哈希函数外,还可以选择在应用程序层面完成密码的加密操作后再存入数据库。例如,利用 Python 中的 `bcrypt` 或其他成熟的第三方库来进行处理: ```python import bcrypt # 密码加密过程 password = b'secure_password' salt = bcrypt.gensalt() hashed_password = bcrypt.hashpw(password, salt) # 将加密后的密码插入到数据库 query = "INSERT INTO users (username, password) VALUES (%s, %s)" values = ("alice", hashed_password.decode()) cursor.execute(query, values) # 验证用户输入的密码是否匹配 def verify_password(input_password, stored_hashed_password): return bcrypt.checkpw(input_password.encode(), stored_hashed_password.encode()) stored_hashed_password = cursor.fetchone()[0] is_valid = verify_password(b'user_input_password', stored_hashed_password) print(is_valid) ``` 这种方式能够更好地控制加密流程并提升整体系统的安全性[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值