保护用户密码:使用 Bcrypt 库进行密码加密

2023-03-30 00:00:00 密码 加密 用户密码

下面是使用 Bcrypt 库进行密码加密的示例代码:

import bcrypt

# 定义要加密的密码字符串
password = "pidancode.com"

# 生成 salt
salt = bcrypt.gensalt()

# 使用 salt 和默认的 cost factor(即 12)进行密码加密
hashed_password = bcrypt.hashpw(password.encode("utf-8"), salt)

# 输出加密后的密码
print(hashed_password)

解释一下代码的每一行:

  • 第 3 行:定义要加密的密码字符串为“pidancode.com”。
  • 第 6 行:使用 Bcrypt 的 gensalt() 方法生成一个随机的 salt。
  • 第 9 行:使用 Bcrypt 的 hashpw() 方法对密码进行加密。这个方法接受两个参数:要加密的字符串和 salt,它会返回加密后的字符串。需要注意的是,这里我们要将密码字符串转换成字节串(即 bytes 类型),所以要调用字符串的 encode() 方法。
  • 第 12 行:输出加密后的密码。

运行这段代码,输出的加密后的密码应该长得像这样:

b'$2b$12$UKf1H6dN90b5F5o/ezrX9eFVZd60pZwU6GnU6nyAz2sjA1uBzbRl6'

这个字符串包含了加密算法的版本号、cost factor、salt 和密码的哈希值。在验证密码时,我们可以使用 Bcrypt 的 checkpw() 方法来检查明文密码是否与这个哈希值匹配:

import bcrypt

# 假设从数据库中查询出来的哈希值为:
hashed_password_from_db = b'$2b$12$UKf1H6dN90b5F5o/ezrX9eFVZd60pZwU6GnU6nyAz2sjA1uBzbRl6'

# 定义要验证的密码字符串
password_to_check = "pidancode.com"

# 使用 checkpw() 方法验证密码
if bcrypt.checkpw(password_to_check.encode("utf-8"), hashed_password_from_db):
    print("密码正确")
else:
    print("密码错误")

这段代码的逻辑很简单:首先假设从数据库中查询出来的哈希值为上面加密代码输出的字符串,然后定义要验证的密码字符串为“pidancode.com”。最后使用 Bcrypt 的 checkpw() 方法验证密码,如果验证通过则输出“密码正确”,否则输出“密码错误”。

相关文章