2016-09-19 2 views
-1

У меня есть типичная переменная пароля char[] с геттерами и сеттерами. Я сделал это, чтобы моя переменная пароля никогда не отображалась в виде обычного текста.char [] пароль получателя и сеттеры для строки

private String passwordAsString; 
private char[] password; 

public char[] getPassword() { return password; } 
public void setPassword(char[] password) { this.password = password; } 

Я хочу отправить свой пароль в базу данных, но я считаю, что его нужно отправлять как тип String. Итак, я решил создать новую переменную под названием PasswordAsString. Есть ли лучший подход? Это кажется неряшливым.

Во-вторых, мой getPasswordAsString не возвращает пароль в виде строки. То, что я до сих пор:

public void setPasswordAsString(String passwordAsString) { 
     this.passwordAsString = passwordAsString; 
    } 

    public String getPasswordAsString() { 
     return password.toString(); 
    } 
+0

Замечание: при взятии и возврате массивов паролей вы можете рассмотреть возможность отправки и создания копии массива. – ChiefTwoPencils

+3

Вам не нужна никакая другая переменная. У вас уже есть пароль в вашем массиве символов. Все, что вам нужно, это создать String из этого массива char. http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#String-char:A- –

+1

Обычной причиной хранения паролей в объектах типа 'char []' является * избегайте * помещать их в 'String', которые не могут быть очищены и которые могут зависать в памяти VM в течение неопределенного промежутка времени даже после того, как они больше не доступны. –

ответ

0

метод полукокса массива ToString() не собирается получить, что вы хотите. Вместо этого, построить новую строку:

public String getPasswordAsString() { 
    return new String(password); 
} 

Кроме того, я бы, вероятно, рассматривать не включая сеттер для поля passwordAsString (или имеющих второе поле вообще, если на то пошло), так как это противоречит тому, что вы пытаетесь для достижения здесь.

1

Поглотителя/сеттер для пароля в качестве String может быть реализован следующим образом:

public void setPasswordAsString(String passwordAsString) { 
    this.password = passwordAsString.toCharArray(); 
} 

public String getPasswordAsString() { 
    return new String(password); 
} 

Они получают и не установить char[] password поля непосредственно - нет необходимости в passwordAsString поле. Конвертировать из char[] в String с new String(char[]) и от String до char[] с String.toCharArray().

Я уверен, что прохождение вокруг пароля как String, как это, побеждает любая цель безопасности для использования массива char.

+0

Да, вот что я имею в виду. Передача пароля как строки поражает цель, но как еще вы можете сохранить ее в базе данных? Вы не можете передать массив в базу данных. –

+1

@JMullen Если вы сохраняете незашифрованные пароли в своей базе данных, у вас гораздо больше проблем с безопасностью. – shmosel

+0

Да, хорошая точка. Благодарю. –

Смежные вопросы