有没有办法在没有“unicodePwd”属性的情况下更改LDAP密码

时间:2014-08-13 18:25:41

标签: java ldap

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

我只有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);

1 个答案:

答案 0 :(得分:1)

您必须使用LDAP扩展操作才能执行此操作,以便服务器正确处理它,详情请参阅:http://www.rfc-editor.org/rfc/rfc3062.txt