将密码与 LDAP 存储的密码进行比较



我正在创建一个"更改密码"表单,其中要求用户首先输入以前的密码,然后输入新密码(两次)。

我应该将输入的"以前的密码"与已经存储的密码进行比较。

我的 Web 应用程序使用 LDAP 服务器来存储用户凭据。密码显然是使用 SHA 存储的。

所以我要做的是获取用户输入的先前密码,使用 SHA1 消化它,然后进行比较。

 String oldPass = request.getParameter("oldpass");
 String enteredOldPass= App.getInstance().getCipher().cipher(oldPass);
            String ldapPassword= ctx.get("userpassword");

但这不起作用,因为密码不同。当我在LDAP中存储"test"时,我在调用.get("userPassword")时获得{sha}qUqP5cyxm6YcTAhz05Hph5gvu9M=,而在自己散列"test"时a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

我在这里做错了什么?似乎缺少一个步骤,因为我的结果是纯粹的十六进制,而我从 LDAP 得到的结果是 ASCII。但是我尝试将字符串转换为十六进制(使用字符串到十六进制在线转换器),但结果仍然不同。

你不做这些。

  • 您尝试以用户身份重新绑定该密码。它要么成功,要么失败。这告诉你是对还是错。API 和协议以及服务器将处理所需的任何哈希处理。
  • 或者,如果您使用的是支持扩展更改密码操作的 LDAP 服务器,则可以在扩展操作中提供旧密码和新密码。

您必须转换为二进制,然后转换为 base64。试试这个:

echo -n "test" | sha1sum | awk '{print $1}' <br>

结果将是 a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

echo -n "test" | sha1sum | awk '{print $1}' | xxd -r -p | base64 

结果将是 qUqP5cyxm6YcTAhz05Hph5gvu9M=

最新更新