Установить уже хешированный пароль для пользователей LDAP (с Java)

1

Я пытаюсь перенести устаревшее приложение (которое делает его собственное управление пользователями) на 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);

Фактическая настройка пароля работает, я вижу, что пароль был изменен. Однако я не могу выполнить аутентификацию с новым паролем.

Изображение 174551

Теги:
security
ldap
hash
passwords

1 ответ

2

На большинстве серверов LDAP схема хэширования SSHA основана на SHA1, а не на SHA-256. Вы можете попробовать с префиксом {SSHA256}.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню