Найти в Дзене
DAILY.CODE

Правильное хранение паролей Java.

Когда речь заходит о месте для хранения паролей в внутри программы, первое, что приходит на ум неискушенному программисту это переменная типа String. В этой короткой заметке я постараюсь объяснить, почему это не правильно.

В Java объект String является неизменяемым (иммутабельным - англ. immutable), то есть после создания такой объект невозможно изменить. Что это значит в контексте темы? Однажды созданный, он остается в памяти до момента сбора мусора ява-машиной. Следовательно, любой процесс, способный сделать дамп памяти в этом промежутке времени, может получить доступ к вашим данным.

Выходом из ситуации, но не панацеей, может служить использование для хранения паролей массив типа char. В этом случае есть возможность, удалить хранящиеся в нем данные, из памяти не дожидаясь, пока отработает сборщик мусора. Сделать это, например, можно заменив содержимое массива случайным набором символов.

Как упоминалось выше, этот способ не панацея, на какое-то время пароль все равно появляется в памяти, да и некоторые вариации ява-машин могут делать и хранить копии массивов в памяти, пока сборщик мусора не почистит ее. Но, все же, предпочтительнее использовать этот способ вместо хранения в String объекте.