JavaRush /Java Blogu /Random-AZ /Sual və Cavab: Nə üçün Java-da parolu Simlə deyil, simvol...

Sual və Cavab: Nə üçün Java-da parolu Simlə deyil, simvol massivində saxlamaq daha yaxşıdır?

Qrupda dərc edilmişdir
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.
Sual və Cavab: Nə üçün Java-da parolu Simlə deyil, simvol massivində saxlamaq daha yaxşıdır?  - 1
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 Stringadətən sətirlərin dəyişməzlik ( ) adlı xüsusi xassəsini ehtiva edir Immutablevə 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. StringOnlar təkrar istifadə üçün istifadə olunduğundan , String poolparolun 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? JPasswordFieldchar []getText ()

Səbəb 3. Çap edin

Bir növ ilə Stringhə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
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION