Hey, friends! I am biubiu. Today, I'm going to share with you a super useful Python password handling library - Passlib! In the development process, password handling is a very important and tricky aspect. How to store user passwords securely? How to verify passwords? These are questions we need to pay special attention to. Luckily, we have Passlib, which wraps various commonly used password hashing algorithms, making it super convenient to use! ## Installation First, install Passlib via pip: ```python pip install passlib ```
Basic Usage
Let’s first take a look at the most basic password encryption and verification:
from passlib.hash import pbkdf2_sha256 # Encrypt the password hash = pbkdf2_sha256.hash("my_password") print(f"Encrypted password: {hash}") # Verify password is_valid = pbkdf2_sha256.verify("my_password", hash) print(f"Password verification result: {is_valid}") # True # Verify incorrect password is_valid = pbkdf2_sha256.verify("wrong_password", hash) print(f"Incorrect password verification result: {is_valid}") # False
Isn’t it simple? We are using the pbkdf2_sha256 algorithm, which is one of the recommended encryption methods. Each encryption automatically salts, so even the same password will yield different results each time, making it more secure!
Customizing Encryption Parameters
If you want to enhance password security, you can also customize the encryption parameters:
# Customize the number of encryption rounds custom_pbkdf2 = pbkdf2_sha256.using(rounds=25000) hash = custom_pbkdf2.hash("my_password") # Verifying the password is still simple is_valid = pbkdf2_sha256.verify("my_password", hash)
The rounds parameter determines the number of encryption rounds; the more rounds, the more secure it is, but it will also take more time. The default is 29000 rounds, which can be adjusted based on actual needs.
Supports Multiple Encryption Algorithms
Passlib supports multiple encryption algorithms; let’s look at a few common ones:
# bcrypt algorithm from passlib.hash import bcrypt hash = bcrypt.hash("my_password") # sha256_crypt algorithm from passlib.hash import sha256_crypt hash = sha256_crypt.hash("my_password") # argon2 algorithm (requires additional installation of argon2-cffi) from passlib.hash import argon2 hash = argon2.hash("my_password")
Different algorithms have their own characteristics, for example:
-
bcrypt: Widely used, good security
-
sha256_crypt: Fast computation, suitable for lightweight applications
-
argon2: Next-generation algorithm, highest security
Using in Web Applications
In real projects, we often need to use it with a database. Here’s a simple user registration and login example:
from passlib.hash import pbkdf2_sha256 import sqlite3 def register_user(username, password): # Encrypt the password hashed_password = pbkdf2_sha256.hash(password) # Store in the database conn = sqlite3.connect('users.db') c = conn.cursor() c.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, hashed_password)) conn.commit() conn.close() def verify_user(username, password): # Retrieve encrypted password from the database conn = sqlite3.connect('users.db') c = conn.cursor() c.execute('SELECT password FROM users WHERE username = ?', (username,)) stored_password = c.fetchone() conn.close() if stored_password: # Verify the password return pbkdf2_sha256.verify(password, stored_password[0]) return False
Tips
-
Never store passwords in plain text!
-
Choosing the right encryption algorithm and parameters is very important
-
Note that the stored password hash will be much longer than the original password
-
Be cautious of timing attacks when verifying passwords
Alright friends, that’s it for today’s introduction to Passlib! With it, you don’t have to worry about password handling anymore~ Remember to prioritize password security in actual projects.
If you find it useful, give it a try! If you encounter any issues, feel free to ask me in the comments. Next time, biubiu will bring more fun Python knowledge, see you then!
By the way, if you want to learn more about Passlib, I recommend checking out its official documentation:
Wishing everyone happy coding and continuous improvement in Python learning! 😊
Like and share
Let money and love flow to you