gpt4 book ai didi

java - 为 LDAP 用户设置已经散列的密码(使用 Java)

转载 作者:行者123 更新时间:2023-11-29 05:11:53 25 4
gpt4 key购买 nike

我尝试将遗留应用程序(它自己进行用户管理)迁移到 LDAP。遗留应用程序将其用户存储在具有散列密码的数据库表中。我知道散列算法 (SSHA-256) 以及盐(用户名)并且我能够用几行代码重新创建散列(当我知道密码时,例如,对于一个测试用户) .

哈希是这样产生的:

public static String hash(String password, String salt) throws Exception {

MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
String text = password + "{" + salt + "}";
messageDigest.update(text.getBytes("UTF-8"));
byte[] digest = messageDigest.digest();
StringBuilder stringBuilder = new StringBuilder(digest.length * 2);
for(byte b: digest)
stringBuilder.append(String.format("%02x", b & 0xff));
return stringBuilder.toString();
}

此方法的结果存储在遗留数据库中。我也想为 LDAP 中的用户使用此密码哈希(否则,每个用户都必须在迁移后创建一个新密码)。我尝试了以下方法在 LDAP 中设置密码:

Attribute attribute = new BasicAttribute("userpassword", someHashFromTheMethodAbove);
ModificationItem[] modifications = new ModificationItem[1];
modifications[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attribute);
context.modifyAttributes("uid=testuser,ou=User,dc=users,dc=de", modifications);

密码的实际设置有效,我可以看到密码已经被更改了。但是,我无法使用新密码进行身份验证。

enter image description here

最佳答案

在大多数 LDAP 服务器中,SSHA 散列方案基于 SHA1 而不是 SHA-256。您可能想尝试使用 {SSHA256} 前缀。

关于java - 为 LDAP 用户设置已经散列的密码(使用 Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28153498/

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