【问题标题】:Get decrypted LDAP pwdhistory values using Java使用 Java 获取解密的 LDAP pwdhistory 值
【发布时间】:2015-12-21 22:39:27
【问题描述】:
        String[] userAttrList = {"cn", "sn","pwdHistory}; 
        SearchResult searchResult = lc.search(baseDN, SearchScope.SUB, searchFilter, userAttrList);
        List<SearchResultEntry> result = searchResult.getSearchEntries();
        for (SearchResultEntry sre : result) {
            value = sre.getAttributeValue("pwdHistory");
            System.out.println(sre.getAttributeValue("pwdHistory")); 
            return value; }

我正在使用 unboundidsdk 从 LDAP 获取用户的详细信息。

属性(name=cn, values={'Test User'}), 属性(名称=sn,值={'用户'}), 属性(name=pwdHistory, values={'20150902093503Z#2.5.4.35#32#{AES256}33243DD8jnwa8a8asbaaa==', '20150903091818Z#2.5.4.35#32#{AES256}PJiYUi+ssasZ#2050.20=', '470.2 4.35#32#{AES256}asasasAAA222221211221=='})},控件={})]

我以 LDAP 默认加密形式获取密码历史记录。

是否有可用的 API 以解密格式获取它?

【问题讨论】:

    标签: java passwords ldap password-encryption unboundid-ldap-sdk


    【解决方案1】:

    获取解密的 pwdHistory 值

    你不能,因为它们没有加密是第一位的。它们是散列的。

    任何允许您以明文形式检索密码的系统都是设计不当的。 OpenLDAP 不是其中之一。

    【讨论】:

    • 我得到一个 AES256 值(这是一种对称加密算法),它可以被解密,不是吗?我想知道 LDAP 是否具有该功能。我认为这是可能的原因是,当我使用 root 用户进行查询时,我以明文形式获得了“userPassword”属性。 LDAP 人员告诉我 userPassword 是加密的,但我以纯文本形式获取它,因为我以 root 用户身份获取它。奇怪的是,它并没有申请密码历史。
    • 这是一个选择。说它设置“错误”是不正确的。使用非散列甚至纯文本密码存储方案的配置是有效的。虽然可能不是最佳做法。
    • @jeemster 绝对非常糟糕的做法,因此是错误的。请参阅 [password-encryption] 标签的评论以及 this answer 了解原因,尽管我假设您已经知道这些事情。将破坏公司的法律责任引入计算机系统是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多