首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Spring在LDAP中设置SSHA密码

从Spring在LDAP中设置SSHA密码
EN

Stack Overflow用户
提问于 2013-11-26 23:17:46
回答 1查看 3.4K关注 0票数 4

我在研究如何在Apache DS LDAP中以SSHA散列而不是纯文本形式保存密码时遇到了问题。据我所知,正确的方法应该是将Apache DS配置为使用SSHA存储密码,然后在设置密码时只发送纯文本。但是,我不知道如何配置Apache DS来做到这一点。

我已经将散列密码推送到LDAP中(使用LDAP的Admin接口),Apache DS根据正确的密码进行了正确的身份验证。但是,我需要插入来自我们的Java应用程序的密码。这不可能是一个不寻常的请求,所以我一定遗漏了什么。

下面是我使用org.springframework.ldap.core的LdapTemplate接口在java中设置密码的代码

代码语言:javascript
复制
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 Server时,我看到密码是以纯文本格式保存的:

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

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-02-19 23:36:08

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

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

代码语言:javascript
复制
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}这样的加盐算法,你也必须调整代码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20220983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档