在Windows上使用Python创建兼容的LDAP密码(md5crypt)

4 投票
4 回答
8071 浏览
提问于 2025-04-16 06:23

你知道怎么在Windows上用Python创建一个兼容ldap的密码吗?我比较喜欢用md5crypt这种方式。

我以前在Linux上写过类似的代码,但在Windows上没有crypt这个模块。

char_set = string.ascii_uppercase + string.digits
salt = ''.join(random.sample(char_set,8))
salt = '$1$' + salt + '$'
pwd = "{CRYPT}" + crypt.crypt(str(old_password),salt)

4 个回答

1

你可以使用 fcrypt,这是一个用纯Python写的Unix模块 crypt 的实现。虽然它的速度比 crypt 慢一点,但功能是一样的。

3

来自这里 http://www.openldap.org/faq/data/cache/347.html

生成SHA哈希的一种方式可以是:

import sha 
from base64 import b64encode 

ctx = sha.new("your_password") 
hash = "{SHA}" + b64encode(ctx.digest())
print(hash)

这段代码是用Python写的。

# python my_sha.py
{SHA}Vk40DNSEN9Lf6HbuFUzJncTQ0Tc=

我(不仅仅是我)推荐再使用MD5了。

附言:通过这个链接你可以尝试一些Windows版本的选项。

4

Passlib 是一个 Python 库,里面有各种可以在不同操作系统上使用的加密算法实现。特别是,它包含了 ldap_md5_crypt,听起来正是你需要的。下面是如何使用它的示例代码(这段代码在 Windows 和 Linux 上都能运行):

from passlib.hash import ldap_md5_crypt

#note salt generation is automatically handled
hash = ldap_md5_crypt.encrypt("password")

#hash will be similar to '{CRYPT}$1$wa6OLvW3$uzcIj2Puf3GcFDf2KztQN0'

#to verify a password...
valid = ldap_md5_crypt.verify("password", hash)

我想提一下,虽然 MD5-Crypt 在很多地方都能用(比如 Linux、所有 BSD 系统,还有 openssl 内部),但它并不是最安全的加密方式,实际上非常不安全,尽量避免使用。如果你想要一个最强的加密方式,跟 Linux 的 crypt() 兼容,SHA512-Crypt 可能是更好的选择。它在 MD5-Crypt 的基础上增加了可变的加密轮数,还有其他一些改进。

撰写回答