JavaRush /Java блогы /Random-KK /Сұрақ-жауап: Неліктен Java тіліндегі құпия сөзді Жолда ем...

Сұрақ-жауап: Неліктен Java тіліндегі құпия сөзді Жолда емес, таңбалар массивінде сақтау жақсы?

Топта жарияланған
Сіз Java Junior лауазымына арналған сұхбатта осындай сұрақты естуіңіз мүмкін. Бірақ бұл туралы менің досым техникалық жетекші лауазымына сұхбат кезінде сұрады.
Сұрақ-жауап: Неліктен Java тіліндегі құпия сөзді Жолда емес, таңбалар массивінде сақтау жақсы?  - 1
Мәтіндік деректерді сақтау үшін , және Stringтаңбалар массивін пайдалануға болады. Бірақ белгілі бір тапсырма үшін біреуін немесе екіншісін саналы түрде таңдау қиын, егер сіз әлі ұқсас жағдайға тап болмасаңыз. Дегенмен, менің досым атап өткендей, -ге қатысты кез келген сұрақ String, әдетте, өзгермейтіндік ( ) деп аталатын жолдардың ерекше қасиетін қамтиды Immutableжәне ол сұхбатта мұны пайдаланды. char []Сонымен, құпия сөзді сақтау үшін емес, пайдаланудың бірнеше себебін қарастырайық String.

Себеп 1. Жолдар өзгермейді

Java тілінде жолдар өзгермейтін болғандықтан, сіздің кәдімгі мәтіндік құпия сөзіңіз қоқыс жинаушы оны тазаламайынша жадта қолжетімді болады. Және Stringолар қайталанатын пайдалану үшін пайдаланылғандықтан String pool, құпия сөздің жадта ұзақ уақыт сақталуы ықтималдығы өте жоғары, бұл мүлдем қауіпсіз емес.
Java String пулы – бұл арнайы орында – үймеде орналасқан бассейн немесе an objectілер жиыны (жолдар). Java тіліндегі жол – ең кең тараған деректер түрлерінің бірі. Бұл қарабайыр тип емес, an object, өйткені ол ресурстарды көп қажет етеді. Сонымен, төрт таңбадан тұратын жолды сақтау үшін 56 byte жадты бөлу керек. Сондықтан жолдар, басқа нысандар сияқты, үймеде сақталады.
Жад демпіне рұқсаты бар кез келген адам құпия сөзді кәдімгі мәтіннен таба алады, бұл кәдімгі мәтіннен гөрі шифрланған құпия сөзді пайдаланудың жақсы себебі. Жолдар өзгермейтін болғандықтан, олардың мазмұнын өзгерту мүмкін емес. Кез келген өзгерту жаңа жолды жасайды. Бірақ жағдайда char []оның кез келген элементтерін нөлмен немесе бос таңбамен ауыстыруға болады. Осылайша, құпия сөзді таңбалар массивінде сақтау құпия сөзді ұстап алу қаупін азайтады.

Себеп 2. Authorлардың ұсыныстары

Java өзі (әрине, оны жасаушылар арқылы) қайтаратын getPassword ()сыныптың әдісін пайдалануды ұсынады . Сондай-ақ ескірген әдісті қолдануға болады . Неліктен тіл авторларының ұсыныстарын орындамасқа? JPasswordFieldchar []getText ()

Себеп 3. Басып шығару

Түрмен қатарда Stringсақталған мәтін журнал файлында немесе консольде басып шығару қаупі әрқашан бар. Сонымен қатар, қолдансаңыз Array, сіз массивтің мазмұнын басып шығармайсыз, тек оның жадтағы орнын басып шығарасыз. Әрине, бұл маңызды себеп емес, бірақ бәрібір мағынасы бар.
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
Әрине, char []парольдерді сақтау үшін Java пайдаланудың өзі панацея емес. Сізге хэштермен жұмыс істеу және құпия сөздерді кәдімгі мәтін түрінде сақтаудың орнына шифрлау сияқты қауіпсіздік шараларын қолдану қажет. Және, әрине, аутентификация proceduresасынан кейін бірден оны жадтан жойыңыз. Javarevisited материалдарына негізделген
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION