Introduction to Passlib
Passlib is a versatile Python library designed for handling passwords and other sensitive data. With support for over 30 different password hashing algorithms, it’s an essential tool for implementing secure password storage and authentication mechanisms in your applications. In this guide, we delve into some of the most useful APIs provided by Passlib, accompanied by comprehensive code snippets and examples.
Installing Passlib
pip install passlib
Basics: Using the CryptContext class
This class is the core of Passlib’s API for handling password hashes. It allows you to manage multiple algorithms and policies.
Creating a CryptContext
from passlib.context import CryptContext
pwd_context = CryptContext(
schemes=["pbkdf2_sha256", "des_crypt"],
deprecated="auto")
Hashing a Password
hash = pwd_context.hash("mysecretpassword")
print(hash)
Verifying a Password
is_valid = pwd_context.verify("mysecretpassword", hash)
print(is_valid) # True
Advanced Usage: Customizing Hash Schemes
Setting Options for Algorithms
pwd_context = CryptContext(
schemes=["pbkdf2_sha256"],
pbkdf2_sha256__default_rounds=8000
)
Using Passlib Hashes in Django
Passlib can be integrated into Django applications to manage password hashing and authentication seamlessly.
Integrating Passlib
from passlib.hash import pbkdf2_sha256
def set_password(raw_password):
return pbkdf2_sha256.hash(raw_password)
def check_password(raw_password, hashed_password):
return pbkdf2_sha256.verify(raw_password, hashed_password)
Using in Django Models
class User(models.Model):
username = models.CharField(max_length=150, unique=True)
password = models.CharField(max_length=128)
def set_password(self, raw_password):
self.password = set_password(raw_password)
def check_password(self, raw_password):
return check_password(raw_password, self.password)
Complete Flask App Example
Here is a complete Flask app example demonstrating how to use Passlib for password hashing:
from flask import Flask, request, jsonify
from passlib.context import CryptContext
app = Flask(__name__)
pwd_context = CryptContext(schemes=["pbkdf2_sha256"], deprecated="auto")
users = {}
@app.route('/signup', methods=['POST'])
def signup():
username, password = request.json["username"], request.json["password"]
if username not in users:
users[username] = pwd_context.hash(password)
return jsonify({"msg": "User created successfully"}), 201
return jsonify({"msg": "User already exists"}), 400
@app.route('/login', methods=['POST'])
def login():
username, password = request.json["username"], request.json["password"]
if username in users and pwd_context.verify(password, users[username]):
return jsonify({"msg": "Logged in successfully"}), 200
return jsonify({"msg": "Invalid credentials"}), 400
if __name__ == '__main__':
app.run(debug=True)
By leveraging Passlib in your Python applications, you can ensure that sensitive data like passwords are securely managed to protect against potential security threats.
Hash: 80b84075a9311e631b676740ba8e99e2533d7464097376572186ad6806d6b483