Java Junior lavozimi uchun intervyuda bunday savolni eshitishingiz mumkin. Ammo mening do'stim texnik rahbar lavozimiga intervyu paytida buni so'rashdi.
Matn ma'lumotlarini saqlash uchun ikkalasi ham
String
, belgilar qatoridan foydalanish mumkin. Ammo, agar siz hali ham shunga o'xshash vaziyatga duch kelmagan bo'lsangiz, ma'lum bir vazifa uchun bir yoki boshqasini ongli ravishda tanlash qiyin. Biroq, do'stim ta'kidlaganidek, bilan bog'liq har qanday savol
String
odatda o'zgarmaslik ( ) deb nomlangan satrlarning maxsus xususiyatini o'z ichiga oladi
Immutable
va u intervyuda bundan foydalangan.
char []
Shunday qilib, keling, parolni saqlash uchun emas, balki dan foydalanishingiz kerak bo'lgan bir nechta sabablarni ko'rib chiqaylik
String
.
Sabab 1. Satrlar o'zgarmasdir
Java-da satrlar o'zgarmasligi sababli, sizning oddiy matn parolingiz axlat yig'uvchi uni tozalamaguncha xotirada mavjud bo'ladi. Va
String
ular takroriy foydalanish uchun ishlatilganligi sababli
String pool
, parol uzoq vaqt davomida xotirada qolishi ehtimoli juda yuqori, bu umuman xavfsiz emas.
Java String pool - bu maxsus joyda - to'pda joylashgan hovuz yoki ob'ektlar (satrlar) to'plami. Java-dagi string - eng keng tarqalgan ma'lumotlar turlaridan biri. Bu ibtidoiy tur emas, balki ob'ekt, chunki u juda ko'p resurs talab qiladi. Shunday qilib, to'rtta belgidan iborat satrni saqlash uchun siz 56 bayt xotira ajratishingiz kerak. Shuning uchun satrlar, boshqa ob'ektlar kabi, to'pda saqlanadi. |
Xotira dumpiga kirish huquqiga ega bo'lgan har bir kishi parolni oddiy matnda topishi mumkin, bu oddiy matndan ko'ra shifrlangan paroldan foydalanish uchun yaxshi sababdir. Satrlar o'zgarmas bo'lgani uchun ularning mazmunini o'zgartirib bo'lmaydi. Har qanday o'zgartirish yangi qatorni yaratadi. Lekin holda
char []
, siz uning istalgan elementini nol yoki bo'sh belgi bilan almashtirishingiz mumkin. Shunday qilib, parolni belgilar qatorida saqlash parolni ushlab qolish xavfini aniq kamaytiradi.
Sabab 2. Mualliflarning tavsiyalari
Java-ning o'zi (yaxshi, yaratuvchilari orqali, albatta)
getPassword ()
sinfdan
JPasswordField
qaytib keladigan usuldan foydalanishni tavsiya qiladi
char []
. Bundan tashqari, eskirgan usulni ham sinab ko'rishingiz mumkin
getText ()
. Nega til mualliflarining tavsiyalariga amal qilmaslik kerak?
Sabab 3. Chop etish
Tur bilan
String
har doim satrda saqlangan matn jurnal faylida yoki konsolda chop etilishi xavfi mavjud. Shu bilan birga, agar siz dan foydalansangiz
Array
, siz massiv tarkibini emas, balki uning xotiradagi joylashuvini chop etasiz. Albatta, bu jiddiy sabab emas, lekin baribir u ham mantiqiy.
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
Albatta,
char []
parollarni saqlash uchun Java-dan foydalanish davo emas. Xeshlar bilan ishlash va parollarni oddiy matnda saqlash o'rniga ularni shifrlash kabi xavfsizlik choralarini ko'rishingiz kerak. Va, albatta, autentifikatsiya protsedurasidan so'ng darhol uni xotiradan o'chiring.
Javarevisited materiallari asosida
GO TO FULL VERSION