【问题标题】:How to encrypt(MD5) password in python-ldap?如何在 python-ldap 中加密(MD5)密码?
【发布时间】:2019-06-04 03:57:43
【问题描述】:

下面的代码在保存时可以正常工作,但是如果我尝试使用保存的普通密码对用户进行身份验证,它不会进行身份验证? 当我手动将 phpldapadmin 中的密码更改为 MD5 并测试身份验证时,它的工作原理。

  1. 如何在 python 中将密码加密为 MD5 并将其保存在 LDAP?
  2. PHP 和 Python 的 MD5 加密有区别吗?
def addUser(record):
    connect = ldapConnect()
    try:
        dn = "cn="+record['cn']+",ou=users,dc=example,dc=com"
        attrs = {
            "objectclass"   : ['inetOrgPerson'.encode('utf-8'),'posixAccount'.encode('utf-8'),'shadowAccount'.encode('utf-8')],
            "uid"           : [record['uid'].encode('utf-8')],
            "cn"            : [record['cn'].encode('utf-8')],
            "sn"            : [record['sn'].encode('utf-8')],
            "givenName"     : [record['givenName'].encode('utf-8')],
            "displayName"   : [record['displayName'].encode('utf-8')],
            "uidNumber"     : [record['uidNumber'].encode('utf-8')],
            "gidnumber"     : [record['gidnumber'].encode('utf-8')],
            "homeDirectory" : [record['homeDirectory'].encode('utf-8')],
            "userpassword"  : [record['userpassword'].encode('utf-8')]
        }
        connect.add_s(dn, modlist.addModlist(attrs))
        connect.unbind_s()
        return True
    except ldap.LDAPError:
        connect.unbind_s()
        return False

【问题讨论】:

  • md5 不是加密,也不是——python和php实现md5的方式没有区别(如果有——必须报bug)
  • 你没有。您将 OpenLDAP 配置为对密码本身进行哈希处理,并且您始终通过 LDAPS 以明文形式提供密码,即通过 SSL 的 LDAP。在存储和比较登录目的时,LDAP 将进行必要的散列。
  • 你不能用MD5加密,因为MD5不是加密的。

标签: openldap python-ldap phpldapadmin


【解决方案1】:

首先,MD5 不是加密算法。它是一种加密散列算法,更准确地说,是一种抗冲突函数,它接受任意长度的消息作为输入,并返回一个可用于验证原始消息的固定长度摘要值作为输出。

因此您无法使用 MD5 算法加密密码。由于 PHP 和 Python 使用相同的算法,所以它们之间没有区别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 2011-10-24
    • 1970-01-01
    • 2011-07-14
    • 2012-03-28
    • 2015-03-15
    • 2023-03-30
    • 2011-04-30
    相关资源
    最近更新 更多