java - 解密 OpenLDAP 密码

标签 java ldap jaas openldap gssapi

我的 OpenLDAP 中有一组用户,我希望从他们那里获得一些信息,例如“cn”和“userPassword”。

然而,当我检索这些详细信息时,即使在我的 LDAP 服务器中设置了密码,密码也不是纯文本。

有什么解决办法吗?

最佳答案

用户密码通常以散列形式存储

userPassword: {hasAlgorithm}Hashed value

示例:

userPassword: {SSHA}DkMTwBl+a/3DQTxCYEApdUtNXGgdUac3

userPassword 属性允许有多个值,并且每个值可以以不同的形式存储。在身份验证期间,slapd 将遍历这些值,直到它找到一个与提供的密码匹配的值,或者直到它用完要检查的值。存储方案存储为值的前缀

你可以拥有:

加密

此方案使用操作系统的 crypt(3) 哈希函数。它通常生成传统的 Unix 风格的 13 字符散列,但在具有 glibc2 的系统上,它也可以生成更安全的 34 字节 MD5 散列

MD5

该方案简单地获取密码的 MD5 哈希并将其以 base64 编码形式存储

SMD5

这通过添加盐(随机数据,这意味着给定的明文密码有多种可能的表示形式)改进了基本的 MD5 方案。比如这两个值代表同一个密码

SSHA

这是 SHA 方案的加盐版本。被认为是slapd支持的最安全的密码存储方案

结论

大多数时候你不需要恢复密码,你只需要根据用户在登录表单中给出的密码计算哈希值,并将它与 userPassword 中的一个进行比较。

关于java - 解密 OpenLDAP 密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5938766/

相关文章:

java - Arquillian 测试覆盖率

database-design - 为什么 LDAP 不流行?

java - JGIT 验证存储库是否有效

java - 需要帮助修复此代码的动态编程/递归使用 Java 计算最小硬币

php - ldap_add() : Add: Server is unwilling to perform

java - 找出给定 uid 所属的 LDAP 组

java - Jaas LoginModule 范围和 session 处理

java - JAAS/JAAC、DROOLS 或自定义

java - SAAJ 包括客户端证书

java - 在独立应用程序中使用 Spring