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

基于Python ldap3实现LDAP存储密码与输入值的精准比对

Python实现LDAP加盐密码(SSHA)精准比对函数

要精准比对LDAP条目中的加盐密码(比如SSHA格式),不用bind操作的话,得手动解析密码结构并重新计算哈希比对。以你给出的{SSHA}F5GwOd39wiK+jEKD6UwCs+9XvzvdRYlX为例,对应密码testpassword,具体实现步骤如下:

核心原理

SSHA格式的密码由{SSHA}前缀 + Base64编码串组成,解码Base64后:

  • 前20字节:原始密码加盐后的SHA-1哈希值
  • 剩余部分:随机盐值

比对时,只需用用户输入的密码加上提取出的盐值,重新计算SHA-1哈希,再和LDAP存储的哈希值对比即可。

实现代码

import hashlib
import base64

def verify_ssha_password(stored_password: str, input_password: str) -> bool:
    # 校验密码格式是否为SSHA
    if not stored_password.startswith("{SSHA}"):
        return False
    
    # 剥离前缀,提取Base64编码部分
    b64_encoded = stored_password[6:]
    try:
        # 解码Base64数据
        decoded_data = base64.b64decode(b64_encoded)
    except:
        return False
    
    # 拆分哈希值和盐(SHA-1哈希固定20字节)
    stored_hash = decoded_data[:20]
    salt = decoded_data[20:]
    
    # 计算输入密码加盐后的SHA-1哈希
    hasher = hashlib.sha1()
    hasher.update(input_password.encode("utf-8"))
    hasher.update(salt)
    computed_hash = hasher.digest()
    
    # 比对哈希值是否一致
    return computed_hash == stored_hash

# 测试示例
if __name__ == "__main__":
    ldap_stored_pwd = "{SSHA}F5GwOd39wiK+jEKD6UwCs+9XvzvdRYlX"
    user_input_pwd = "testpassword"
    print(verify_ssha_password(ldap_stored_pwd, user_input_pwd))  # 输出True

扩展说明

如果你的LDAP还用到其他加盐哈希算法(比如SSHA256),只需调整对应的哈希算法和哈希长度:

  • SSHA256:哈希算法用hashlib.sha256(),哈希长度取32字节
  • SSHA512:哈希算法用hashlib.sha512(),哈希长度取64字节

在LDAP Account Manager中集成时,只需从目标条目里获取到你要比对的那一个密码值,传入这个函数就能得到精准的比对结果,不用绑定整个账号验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:25:18