В моем приложении я использую пароль пользователя в качестве ключа шифрования для носителя шифрования. Я шифрую носитель с помощью PBEWithMD5AndDES, и это отлично работает с паролем, хранящимся в общих настройках. Теперь, чтобы достичь определенного уровня безопасности, я удаляю пароль из общих настроек и использую синглтон, который сохраняется только во время сеанса приложения (поскольку приложение автоматически выходит из системы, требуя ввода пароля). Ниже мой синглтон:
Код: Выделить всё
public class Credentials {
private static Credentials dataObject = null;
private Credentials() {
// left blank intentionally
}
public static Credentials getInstance() {
if (dataObject == null)
dataObject = new Credentials();
return dataObject;
}
private char[] user_password;
public char[] getUser_password() {
return user_password;
}
public void setUser_password(char[] user_password) {
this.user_password = user_password;
}
}
Пароль обнуляется из памяти, если приложение выходит из системы, пользователь выходит из системы или уничтожается. Однако иногда при попытке получить пароль я получаю нулевой указатель.
Код: Выделить всё
char[] pswd = Credentials.getInstance().getUser_password();
Что может быть причиной этого? есть ли другой метод, который я могу использовать, кроме синглтона?
Подробнее здесь:
https://stackoverflow.com/questions/423 ... turns-null