JavaRush /Blog Java /Random-MS /S&J: Mengapakah lebih baik untuk menyimpan kata laluan da...

S&J: Mengapakah lebih baik untuk menyimpan kata laluan dalam Java dalam tatasusunan aksara daripada String?

Diterbitkan dalam kumpulan
Anda mungkin mendengar soalan sedemikian dalam temu bual untuk jawatan Java Junior. Tetapi kawan saya ditanya perkara ini semasa temuduga untuk jawatan Ketua Teknikal.
S&J: Mengapakah lebih baik untuk menyimpan kata laluan dalam Java dalam tatasusunan aksara daripada String?  - 1
Kedua-duanya Stringdan tatasusunan aksara boleh digunakan untuk menyimpan data teks. Tetapi secara sedar memilih satu atau yang lain untuk tugas tertentu adalah sukar jika anda belum menghadapi situasi yang sama. Walau bagaimanapun, seperti yang dinyatakan oleh rakan saya, sebarang soalan yang berkaitan dengan String, biasanya melibatkan sifat istimewa rentetan yang dipanggil kebolehubah ( Immutable), dan dia mengambil kesempatan daripada ini dalam temu bual. Jadi, mari kita lihat beberapa sebab mengapa anda perlu menggunakan char [], dan bukan , untuk menyimpan kata laluan anda String.

Sebab 1. Rentetan tidak boleh diubah

Memandangkan rentetan tidak boleh diubah dalam Java, kata laluan teks biasa anda akan tersedia dalam ingatan sehingga pengumpul sampah mengosongkannya. Dan kerana Stringia digunakan String pooluntuk penggunaan berulang, terdapat kebarangkalian yang agak tinggi bahawa kata laluan akan kekal dalam ingatan untuk masa yang lama, yang tidak selamat sama sekali.
Java String pool ialah kolam atau set objek (string) yang terletak di tempat khas - heap. String dalam Java adalah salah satu jenis data yang paling biasa. Ini bukan jenis primitif, tetapi objek, kerana ia sangat intensif sumber. Jadi, untuk menyimpan rentetan empat aksara, anda perlu memperuntukkan 56 bait memori. Inilah sebabnya mengapa rentetan, seperti objek lain, disimpan pada timbunan.
Sesiapa sahaja yang mempunyai akses kepada longgokan memori boleh mencari kata laluan dalam teks biasa, yang merupakan sebab yang baik untuk menggunakan kata laluan yang disulitkan dan bukannya teks biasa. Kerana rentetan tidak boleh diubah, kandungannya tidak boleh diubah. Sebarang perubahan akan mencipta baris baharu. Tetapi dalam kes char [], anda boleh menggantikan mana-mana elemennya dengan sifar atau aksara kosong. Oleh itu, menyimpan kata laluan dalam susunan aksara jelas mengurangkan risiko pemintasan kata laluan.

Sebab 2. Cadangan penulis

Java sendiri (baik, melalui penciptanya, sudah tentu) mengesyorkan menggunakan kaedah getPassword ()daripada kelas JPasswordFieldyang mengembalikan char []. Anda juga boleh mencuba kaedah yang tidak digunakan lagi getText (). Mengapa tidak mengikut cadangan pengarang bahasa?

Sebab 3. Cetak

Dengan jenis Stringsentiasa ada bahaya bahawa teks yang disimpan dalam rentetan akan dicetak dalam fail log atau dalam konsol. Pada masa yang sama, jika anda menggunakan Array, anda tidak akan mencetak kandungan tatasusunan, tetapi hanya lokasinya dalam ingatan. Sudah tentu, ini bukan sebab yang serius, tetapi ia juga masuk akal.
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
Sudah tentu, menggunakan char []Java untuk menyimpan kata laluan itu sendiri bukanlah ubat mujarab. Anda perlu mengambil langkah berjaga-jaga keselamatan, seperti bekerja dengan cincang dan menyulitkan kata laluan daripada menyimpannya dalam teks biasa. Dan, sudah tentu, padamkannya daripada ingatan serta-merta selepas prosedur pengesahan. Berdasarkan bahan dari Javarevisited
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION