Java Junior vəzifəsi üçün müsahibədə belə bir sualı eşidə bilərsiniz. Ancaq dostum Texniki Rəhbər vəzifəsi üçün müsahibə zamanı bunu soruşdu.
Mətn məlumatlarını saxlamaq üçün həm
String
, həm də simvol massivi istifadə edilə bilər. Ancaq hələ də oxşar vəziyyətlə qarşılaşmamısınızsa, müəyyən bir tapşırıq üçün şüurlu şəkildə birini və ya digərini seçmək çətindir. Bununla belə, dostumun qeyd etdiyi kimi, ilə bağlı hər hansı bir sual
String
adətən sətirlərin dəyişməzlik ( ) adlı xüsusi xassəsini ehtiva edir
Immutable
və o, müsahibədə bundan yararlanıb.
char []
Beləliklə, parolunuzu saxlamaq üçün deyil, istifadə etməyiniz üçün bir neçə səbəbə baxaq
String
.
Səbəb 1. Sətirlər dəyişməzdir
Java-da sətirlər dəyişməz olduğundan, zibil kollektoru onu təmizləyənə qədər sadə mətn parolunuz yaddaşda olacaq.
String
Onlar təkrar istifadə üçün istifadə olunduğundan ,
String pool
parolun uzun müddət yaddaşda qalması ehtimalı kifayət qədər yüksəkdir, bu heç də təhlükəsiz deyil.
Java String hovuzu xüsusi yerdə - yığında yerləşən hovuz və ya obyektlər (sətirlər) dəstidir. Java-da string ən çox yayılmış məlumat növlərindən biridir. Bu, çox resurs tələb etdiyi üçün primitiv tip deyil, obyektdir. Beləliklə, dörd simvoldan ibarət bir sətir saxlamaq üçün 56 bayt yaddaş ayırmaq lazımdır. Buna görə sətirlər, digər obyektlər kimi, yığında saxlanılır. |
Yaddaş zibil qutusuna girişi olan hər kəs parolu düz mətndə tapa bilər ki, bu da düz mətndən daha çox şifrələnmiş paroldan istifadə etmək üçün yaxşı səbəbdir. Sətirlər dəyişməz olduğundan onların məzmunu dəyişdirilə bilməz. İstənilən dəyişiklik yeni bir xətt yaradacaq. Lakin vəziyyətində
char []
onun hər hansı elementini sıfır və ya boş simvolla əvəz edə bilərsiniz. Beləliklə, parolun simvol massivində saxlanması parolun tutulması riskini açıq şəkildə azaldır.
Səbəb 2. Müəlliflərin tövsiyələri
Java özü (əlbəttə ki, yaradıcıları vasitəsilə) qaytaran
getPassword ()
sinifdən bir metoddan istifadə etməyi tövsiyə edir . Siz həmçinin köhnəlmiş metodu sınaya bilərsiniz . Niyə dil müəlliflərinin tövsiyələrinə əməl etməyək?
JPasswordField
char []
getText ()
Səbəb 3. Çap edin
Bir növ ilə
String
həmişə sətirdə saxlanılan mətnin log faylında və ya konsolda çap edilməsi təhlükəsi var. Eyni zamanda, istifadə etsəniz
Array
, massivin məzmununu deyil, yalnız yaddaşdakı yerini çap edəcəksiniz. Əlbəttə ki, bu, tam olaraq ciddi bir səbəb deyil, amma yenə də məntiqlidir.
String strPassword = "Unknown";
char [] charPassword = new char [] {'U', 'n', 'k', 'w', 'o', 'n'};
System.out.println ("String password:" + strPassword);
System.out.println ("char password:" + charPassword);
String password: Unknown
Character password: [C@110b053
Şübhəsiz ki,
char []
parolları saxlamaq üçün Java-dan istifadə heç də hər hansı bir dərman deyil. Haşlarla işləmək və parolları düz mətndə saxlamaq əvəzinə şifrələmək kimi təhlükəsizlik tədbirləri görməlisiniz. Və təbii ki, autentifikasiya prosedurundan dərhal sonra onu yaddaşdan silin.
Javarevisited-dən materiallar əsasında
GO TO FULL VERSION