Java char [] массив обработки jPasswordField и операторы обновления SQL

TLDR; Разве анализ массива char через класс String в форме String.valueOf(charArray); более безопасен, чем создание объекта класса String? Я пытаюсь понять /расширить обсуждение, которое было в: Почему char [] предпочтительнее, чем String для паролей?

Недавно я много читал о том, как "безопасно" обрабатывать пароли в Java, но есть еще одна проблема, которую я не совсем знаю, как ее решить. Когда вы берете пароль из jPasswordField, он представляет собой массив символов. Это здорово, и все потому, что вы можете легче переписать массив нулями, чем ждать, пока сборщик мусора не найдет такие вещи, как строки и тому подобное.

Моя проблема заключается в следующем: Когда я хочу запустить оператор обновления в SQL для обновления пароля, я просто НЕ МОГУ вставить массив символов, потому что это неправильный формат. Когда я делаю что-то вроде Arrays.toString(arrayName);, я получаю это в формате:

[e, a, c, h, o, f, t, h, e, l, e, t, t, e, r, s]

Единственный способ, которым я могу поместить его в столбец базы данных с ... скажем, VARCHAR (100) без всех запятых и пробелов, кажется, что-то напишет что-то вроде:

String stringPassword="";
int i=0;
for(char a:newPassword){
    stringPassword=stringPassword+newPassword[i];
    i++;
}

Если я сделаю что-то подобное, разве я не уничтожил весь смысл использования массива символов? Поиск в Google не помог мне решить эту проблему.

Заранее спасибо за ваше время.

РЕДАКТИРОВАТЬ 1: Спасибо KKaar за возможное решение:

char[] passwordArray;
String.valueOf(passwordArray);

Это прекрасно работает по синтаксису для тех целей, для которых он мне нужен, но я до сих пор не знаю, безопасно ли это. Он не делает переменную из этого, если я сделаю String.valueOf(passwordArray) в синтаксисе prepareStatement, но он все равно анализирует значения через строку учебный класс. Означает ли это, что он все еще в опасности или безопасен?

4 голоса | спросил Staggen 23 Maypm18 2018, 23:25:06

1 ответ


0
---- +: = 0 =: + ---- создает строку и столь же небезопасен.В настоящее время можно использовать JDBC:Это гарантирует, что после выполнения этого кода ни один объект не будет перемещаться, чтобы собирать мусор, который может показать пароль.Конечно, только если драйвер JDBC не протекает.ClearParameters кажется немного преувеличенным, но кто знает.CharArrayReader не копирует переданный массив, следовательно, это также безопасно.Запрашиваемый для конкретного кода:Поскольку утверждение должно быть закрыто, я позволил себе использовать локальную переменную.
ответил Joop Eggen 24 Mayam18 2018, 00:53:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132