Безопасность Glassfish - jdbcRealm: Как настроить вход в систему с дайджестом SHA-256 - PullRequest
10 голосов
/ 10 августа 2010

Я использую jdbcRealm для безопасности в моем glassfish v3.0.1 b22. Он настроен так, чтобы он использовал таблицу USER в моей базе данных для аутентификации, следуя этому блогу: http://blogs.oracle.com/foo/entry/mort_learns_jdbc_realm_authentication. Я все заработал, если я оставил алгоритм дайджеста в виде простого текста. Однако, когда я пытаюсь использовать SHA-256 для алгоритма дайджеста, он перестает работать. Что я сделал, это указал в Glassfish - Security - Realm - jdbcRealm - дайджест, что я хочу SHA-256 (я просто набираю SHA-256 в поле дайджеста) Затем я написал простую Java-программу для преобразования текста пароля в хэш SHA-256. Затем я вставляю этот хеш в поле моего пароля в базе данных. Кстати, поле пароля имеет тип varchar (30). Я не могу войти больше. Я заметил, что моя простая программа на Java каждый раз генерировала разные хэши для одного и того же текстового поля.

Ниже приведены мои простые Java-программы:

        MessageDigest md = MessageDigest.getInstance("SHA-256");
        String text = "admin";
        md.update(text.getBytes("UTF-8"));
        byte[] digest = md.digest();
        System.out.println(digest.toString());

1 Ответ

17 голосов
/ 10 августа 2010

jdbcRealm позволяет кодировать значения hex или base64.Вам необходимо указать один из них в конфигурации вашей области и в вашем коде, преобразовать байтовый массив в один из следующих форматов:

Base64:

import com.sun.org.apache.xml.internal.security.utils.Base64;
...
byte[] digest = md.digest();
System.out.println(Base64.encode(digest));

Hex:

...
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < digest.length; i++) {
    String hex = Integer.toHexString(0xff & digest[i]);
    if (hex.length() == 1) sb.append('0');
    sb.append(hex);
}
System.out.println(sb.toString());

кстати, поле пароля имеет тип varchar (30)

Вам нужно будет увеличитьразмер вашего поля пароля.Значения SHA-256 base64 и hex имеют длину 45 и 64 символа соответственно.

...