在Windows上使用Python创建兼容的LDAP密码(md5crypt)
你知道怎么在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 的基础上增加了可变的加密轮数,还有其他一些改进。