在我的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);