Как сопоставить свойство byte[] с Hibernate?

Я использую Hibernate/Java для сохранения объекта в базе данных. У объекта есть пароль . ] поле, которое представляет собой String. При регистрации пользователя в моем приложении я хэширую пароль, используя SHA-1 (я признаю, что это немного слабо). Это дает байт[]. ], который я затем конвертирую в String, используя новая строка (байт [] обр); Всякий раз, когда я хочу войти в систему, я просто извлекаю хешированный пароль из базы данных (как String) и сравниваю его с дайджестом входного пароля при входе в систему, используя hashedPasswordFromDatabase.equals(SHA1_HASH(inputPassword));

Это отлично работалов моей системе разработки (Windows 7, JDK 1.6.0_23/JDK 1.7, MySQL 5.5, Tomcat 6.0.26), но после развертывания на нашем сервере (под управлением JDK 1.6 в Linux) equalsникогда не возвращает TRUE даже для одинаковых паролей. Я быстро настроил новую систему разработки (Ubuntu 12.04, MySQL 5.5, JDK 1.7.0_03, Tomcat 7.0.22), и там тоже не работает.

Мне известно о возможных проблемах с кодировкой, указанных в документации Java API для класса String, а также упомянутых в нескольких местах здесь, на SO. Я попробовал несколько кодировок, предложенных на этом форуме (например, Base64, Latin-1), и в итоге получил UnsupportedEncodingException.Я думаю, что мне лучше избегать преобразования String. Итак, как мне спроектировать мою базу данных так, чтобы класс сущностей, сгенерированный Hibernate, имел byte[]для поля passwordвместо String?

8
задан erickson 14 May 2012 в 21:14
поделиться