You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在可借助OpenSSL实现密码生成的Python模块?

Python Modules for Password Generation Using OpenSSL

Great question! Yes, there are several Python modules that let you replicate (and extend) the password hashing/generation functionality of the openssl passwd command, leveraging OpenSSL under the hood. Here are the most practical options to use:

1. Python's Built-in crypt Module

You don't even need to install extra packages for this one—Python's standard crypt module interfaces directly with your system's cryptography backend, which on most modern Unix-like systems is powered by OpenSSL. It supports all the algorithms you mentioned: traditional Unix crypt, MD5-based BSD ($1$), and the Apache apr1 variant.

Example matching your sample command

If you want to replicate openssl passwd -salt lol "input", here's how to do it:

import crypt

# The second argument specifies the salt format ($1$ for BSD MD5, $apr1$ for Apache's variant)
hash_result = crypt.crypt("input", "$1$lol$")
print(hash_result)  # This will output $1$lol$lokvI0eY9X.FM, just like your sample

For the apr1 variant, just swap the salt prefix:

apr1_hash = crypt.crypt("input", "$apr1$lol$")
print(apr1_hash)

2. cryptography Library

This is a robust, industry-standard library that uses OpenSSL for many of its core operations. It's great if you need more cryptographic features beyond just password hashing, and it gives you fine-grained control over the process.

Example for apr1/MD5 hashing

import crypt
import secrets

def generate_openssl_compatible_hash(password: str, salt: str = None, algorithm: str = "md5") -> str:
    if not salt:
        # Generate a secure random 8-character salt, matching openssl's default
        salt = secrets.token_hex(4)[:8]
    
    prefix = "$1$" if algorithm == "md5" else "$apr1$"
    return crypt.crypt(password, f"{prefix}{salt}$")

# Usage
hash_val = generate_openssl_compatible_hash("input", "lol")
print(hash_val)

3. passlib Library

Passlib is a high-level password hashing library that wraps around multiple backends, including OpenSSL. It's designed to be easy to use, with sensible defaults, and it handles salt generation securely out of the box.

Example

from passlib.hash import md5_crypt, apr1_crypt

# Generate an MD5 BSD hash with your specified salt
md5_hash = md5_crypt.using(salt="lol").hash("input")
print(md5_hash)  # Outputs $1$lol$lokvI0eY9X.FM

# Generate an apr1 hash
apr1_hash = apr1_crypt.using(salt="lol").hash("input")
print(apr1_hash)

Quick Notes:

  • For most cases, the built-in crypt module is your best bet if you want no extra dependencies and full compatibility with openssl passwd.
  • If you need more features (like password verification, different algorithms, or cross-platform support), go with passlib or cryptography.
  • Always use randomly generated salts in production (not hardcoded ones like in the examples) to keep your hashes secure.

内容的提问来源于stack exchange,提问作者activedecay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:43:54