簡體   English   中英

為LDAP用戶設置已經哈希的密碼(使用Java)

[英]Set already hashed password for LDAP users (with Java)

我嘗試將遺留應用程序(它自己的用戶管理)遷移到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);

密碼的實際設置有效,我可以看到密碼已被更改。 但是,我無法使用新密碼進行身份驗證。

在此輸入圖像描述

在大多數LDAP服務器中,SSHA散列方案基於SHA1而不是SHA-256。 您可能想嘗試使用{SSHA256}前綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM