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

时间:2016-01-21 09:21:56

标签: passwords ldap

我正在创建一个“更改密码”表单,用户需要先输入以前的密码,然后输入新密码(两次)。

我应该将输入的“先前密码”与已存储的密码进行比较。

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

你不做这些事。

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

答案 1 :(得分:-1)

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

<div id="DbyNtAQyGs" class="videos">
  <a href="#"><img src="" width="212" height="124" /></a>
</div>

结果将是a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

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

结果将是qUqP5cyxm6YcTAhz05Hph5gvu9M =