Java 是否有一种方法可以更改LDAP密码而不必;“独角兽”;属性

Java 是否有一种方法可以更改LDAP密码而不必;“独角兽”;属性,java,ldap,Java,Ldap,在我的LDAP目录中,我没有名为unicodewd的属性 我所有的userPassword 我编写java来更改userPassword属性。但是,它将其存储为纯文本。 例如 如果我希望我的新密码为newpassword LDAP将其存储为newpassword,并且不会对其进行散列 更改此密码后,我无法使用它进行身份验证 我正在执行此操作的代码的一部分: String quotedPassword = "\"" + newPassword + "\""; byte[]

在我的
LDAP
目录中,我没有名为
unicodewd
的属性

我所有的
userPassword

我编写java来更改userPassword属性。但是,它将其存储为纯文本。 例如 如果我希望我的新密码为
newpassword

LDAP将其存储为
newpassword
,并且不会对其进行散列

更改此密码后,我无法使用它进行身份验证

我正在执行此操作的代码的一部分:

String quotedPassword = "\"" + newPassword + "\"";
            byte[] newUnicodePassword = quotedPassword.getBytes("UTF-16LE");

            //String newpass = new String(pwdArray, "UTF8");
            mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userPassword", newUnicodePassword));

            // Perform the update
            ctx.modifyAttributes(userName, mods);
我更改了此代码,使其通过哈希密码,但它仍然无法进行身份验证

MessageDigest md = MessageDigest.getInstance("SHA-256");
            md.update(newPassword.getBytes("UTF-16LE"));

            byte byteData[] = md.digest();

            //convert the byte to hex format method 1
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < byteData.length; i++) {
             sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
            }

            //String newpass = new String(pwdArray, "UTF8");
            mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userPassword", sb.toString()));

            // Perform the update
            ctx.modifyAttributes(userName, mods);
MessageDigest md=MessageDigest.getInstance(“SHA-256”);
md.update(newPassword.getBytes(“UTF-16LE”);
byte byteData[]=md.digest();
//将字节转换为十六进制格式方法1
StringBuffer sb=新的StringBuffer();
for(int i=0;i
您必须使用LDAP扩展操作来执行此操作,以便服务器能够正确处理它,有关详细信息:

自己对密码进行哈希运算肯定是错误的。服务器应该这样做。它是哪个服务器?如果是OpenLDAP,则需要将其配置为在slapd.conf或slapd.d中散列密码。或者尝试将其编码为UTF-8。如何判断它是否为OpenLDAP?您不知道正在运行的LDAP服务器是什么?如果有一个
slapd.exe
正在运行,或者如果您在某处有一个
OpenLDAP
目录,或者一个
slapd.conf
文件或
slapd.d
目录,那么它就是OpenLDAP。如果无法访问服务器主机,请询问管理员。@EJP这是OpenLDAP。我问我的dba。他告诉我给他一份需要做什么的指示清单。想象一下:)现在我必须阅读如何配置LDAP。也许我应该是一名dba:)好吧,我们来看看manslapd.conf和manslapo策略,假设您使用的是密码策略覆盖,您应该这样做。