gpt4 book ai didi

java - 从 Spring 在 LDAP 中设置 SSHA 密码

转载 作者:搜寻专家 更新时间:2023-11-01 03:06:35 26 4
gpt4 key购买 nike

我在解决如何以 SSHA 散列而不是纯文本的形式在 Apache DS LDAP 中保存密码时遇到问题。据我所知,正确的做法应该是将 Apache DS 配置为使用 SSHA 存储密码,然后在设置密码时仅发送纯文本。但是,我不知道如何配置 Apache DS 来执行此操作。

我已将散列密码推送到 LDAP(使用 LDAP 的管理界面)并且 Apache DS 根据正确的密码正确进行身份验证。但是我需要从我们的 Java 应用程序中插入密码。这不是一个不寻常的请求,所以我一定遗漏了什么。

这是我使用来自 org.springframework.ldap.core 的 LdapTemplate 接口(interface)从 java 设置密码的代码

public void storeNewPassword(final String userId, final String password) {

final DistinguishedName dn = new DistinguishedName("dc=users,dc=pms,dc=com");
dn.add("uid", userId);

Attribute pass = new BasicAttribute("userpassword", password);

final ModificationItem mi = new ModificationItem(
DirContext.REPLACE_ATTRIBUTE,
pass);
ldapTemplate.modifyAttributes(dn, new ModificationItem[] {mi});

}

上面的代码正确设置了密码,但是当我查看 Apache DS 服务器时,我看到密码已以纯文本形式保存:

请有人验证这是否是设置密码的正确方法,并建议我如何配置 Apache DS 以将 SSHA 应用于它收到的密码。

谢谢

最佳答案

作为客户,您有责任对密码进行散列和编码。服务器只是像存储任何其他属性一样存储它。

如果你想使用 MD5 散列密码,你可以使用这样的代码:

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;

public class PasswordUtil {
public String hashAndEncodePassword(String password) {
final byte[] md5 = DigestUtils.md5(password.trim().getBytes("UTF-8"));
final byte[] base64 = Base64.encodeBase64(md5);
final String hashedAndEncoded = new String(base64, "ASCII");
return "{MD5}" + hashedAndEncoded;
}
}

如果您想使用不同的哈希算法,您必须将 DigestUtils.md5 的使用更改为正确的方法。

如果您想使用像 {SSHA} 这样的加盐算法,您也必须调整代码。

关于java - 从 Spring 在 LDAP 中设置 SSHA 密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20220983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com