当前位置: 首页 > 知识库问答 >
问题:

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

焦光霁
2023-03-14

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

以下是哈希的创建方式:

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);

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

共有1个答案

蒙华翰
2023-03-14

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

 类似资料:
  • 我刚刚安装了赛贝斯自适应服务器16.0 SP03在Windows和我试图创建密码用户'sa'通过使用以下命令: 但是,我无法更改'sa'的密码,我得到以下错误: 我试着用谷歌搜索,但在大多数地方,我都得到了同样的命令。此外,我没有得到任何关于StackOverflow的信息。因为我是Sybase的新手,所以我没有关于这方面的任何信息。 是否有其他方法可以运行此命令,或者可以运行“从交互式SQL更改

  • 我正在使用pbkdf2算法来散列密码。为每个密码生成一个随机salt,并设置迭代次数,以使计算持续约1秒。 我也在sambe缓冲区中保存盐和哈希: 我的问题是,这个散列密码没有链接到一个用户(一个用户可以有多个密码),我需要有可能取消密码只使用密码本身。我看到的唯一方法是将密码散列到数据库中的每一个salt中取消,直到找到相同的散列,这将花费永远的时间(每一个salt 1秒)。 还有更好的方法吗?

  • 是否可以在Docker中更改根用户密码?我的阿尔卑斯码头工人有以下几行: 我期待着以下几点: 更改root用户密码 步骤2 但也可以像下面这样以“root”身份运行Docker容器 在没有被要求输入根密码的情况下,我假设要么无法更改密码,要么Docker core不知何故知道新密码。

  • 问题内容: 我在由.NET生成的数据库中存储SHA256用户密码哈希,我需要能够使用Node.js进行检查。唯一的问题是.NET和Node.js为相同的密码创建不同的哈希。 。净: Node.js(使用加密): 我找到了,但是无法弄清楚如何实施他的解决方案。 问题答案: 编辑:您正在C#中使用UTF-16,必须在两种语言中使用相同的编码: Node.js: C#:

  • 问题内容: 我正在使用Django REST Framework(DRF)创建一个可以注册新用户的终结点。但是,当我通过POST到达创建端点时,新用户将通过序列化器保存,但密码以明文形式保存在数据库中。我的序列化器的代码如下: 请注意,我使用的是Django auth包中的默认用户模型,并且对使用DRF来说是一个新手! 问题答案: 问题是DRF只需将字段值设置到模型上即可。因此,密码在“密码”字段

  • 我正在使用以下代码创建哈希密码和salt: 我正在数据库中存储HashedPassword和Salt。 现在我要验证用户登录时的密码: 这不起作用,我得到了一个完全不同的哈希密码,而不是存储在数据库中的密码。据我所知,您应该在用户登录时输入的密码之前预置salt,然后运行相同的哈希密码函数。上面不是等价于那个吗?