获取包含属性对象的 LDAP 属性

Get LDAP Attribute which contains an attribute object

我添加了一个 LDAP 条目,该条目具有

给出的属性
BasicAttributes basicAttributes = new BasicAttributes();
BasicAttribute basicAttribute = new BasicAttribute("objectclass");
basicAttribute.add("top");
basicAttribute.add("Adapter");
basicAttributes.put(basicAttribute);
basicAttributes.put(new BasicAttribute("Name","testname"));
basicAttributes.put(new BasicAttribute("Topic", "testtopic"));

if (locid.length != 0) {
basicAttribute = new BasicAttribute("LocID");

for (int i = 0; i < locationid.length; i++)
basicAttribute.add(locationid[i]);

basicAttributes.put(basicAttribute);
}

basicAttributes.put(new BasicAttribute("Password", "passw"));

现在密码属性是 SHA 哈希密码

但是当我像这样使用 ctx.getAttributes 检索属性时

Attributes result = ctx.getAttributes(dn);
NamingEnumeration<?> nm = result.getAll();

while (nm.hasMore()) {
Attribute at = (Attribute) nm.next();
System.out.println(nm.next());
}
}

我得到的输出是

Password: [B@119cca4
Name: testname
Topic: testtopic
LocID: 
objectClass: top, Adapter
cn: test1234

如何将 密码 重新构造为字符串变量?

编辑:我试过了

while (nm.hasMore()) {
        Attribute at = (Attribute) nm.next();
        if ( at.getID().equals("Password"))
        {
            byte [] a = (byte[] )at.get();
            String b = new String(a);
            System.out.println(b);
        }
    }

现在它打印这个 - {SSHA}AvvOJFnG2tjwNTGtDzDnubC/b2B1FbzP5S/LSQ==

现在我如何让它打印 "passw" - 原始密码。

明文密码一旦经过哈希处理就无法找回;这是一种单向哈希。如果您绝对 之后需要取回明文密码,建议将其存储在另一个具有强可逆加密算法的属性中。并锁定对加密值的访问。但是只有当你出于某种原因绝对需要纯文本密码时才这样做(即你需要能够 post 它用于一些遗留的单点登录过程)。