Anda mungkin mendengar pertanyaan seperti itu dalam sebuah wawancara untuk posisi Java Junior. Namun teman saya ditanyai hal ini saat wawancara untuk posisi Technical Lead.
Baik
String
, dan array karakter dapat digunakan untuk menyimpan data teks. Namun secara sadar memilih satu atau yang lain untuk tugas tertentu sulit dilakukan jika Anda belum pernah menghadapi situasi serupa. Namun, seperti yang teman saya tunjukkan, pertanyaan apa pun yang terkait dengan
String
, biasanya melibatkan properti string khusus yang disebut kekekalan (
Immutable
), dan dia memanfaatkannya dalam wawancara. Jadi, mari kita lihat beberapa alasan mengapa Anda harus menggunakan
char []
, dan bukan , untuk menyimpan kata sandi Anda
String
.
Alasan 1. String tidak dapat diubah
Karena string tidak dapat diubah di Java, kata sandi teks biasa Anda akan tersedia di memori hingga pengumpul sampah menghapusnya. Dan karena
String
digunakan
String pool
berulang kali, ada kemungkinan besar bahwa kata sandi akan tetap tersimpan dalam memori untuk waktu yang lama, dan ini sama sekali tidak aman.
Java String pool adalah kumpulan atau kumpulan objek (string) yang terletak di tempat khusus – heap. String di Java adalah salah satu tipe data yang paling umum. Ini bukan tipe primitif, tetapi sebuah objek, karena sangat intensif sumber daya. Jadi, untuk menyimpan string empat karakter, Anda perlu mengalokasikan memori 56 byte. Inilah sebabnya string, seperti objek lainnya, disimpan di heap. |
Siapa pun yang memiliki akses ke dump memori dapat menemukan kata sandi dalam teks biasa, yang merupakan alasan bagus untuk menggunakan kata sandi terenkripsi daripada teks biasa. Karena string tidak dapat diubah, maka isinya tidak dapat diubah. Setiap perubahan akan membuat baris baru. Namun dalam kasus
char []
, Anda dapat mengganti elemen mana pun dengan nol atau karakter kosong. Oleh karena itu, menyimpan kata sandi dalam array karakter jelas mengurangi risiko intersepsi kata sandi.
Alasan 2. Rekomendasi penulis
Java sendiri (tentu saja melalui pembuatnya) merekomendasikan penggunaan metode
getPassword ()
dari kelas
JPasswordField
yang mengembalikan
char []
. Anda juga dapat mencoba metode yang tidak digunakan lagi
getText ()
. Mengapa tidak mengikuti rekomendasi dari penulis bahasa?
Alasan 3. Cetak
Dengan suatu tipe
String
selalu ada bahaya bahwa teks yang disimpan dalam string akan dicetak di file log atau di konsol. Pada saat yang sama, jika Anda menggunakan
Array
, Anda tidak akan mencetak isi array, tetapi hanya lokasinya di memori. Tentu saja, ini bukan alasan yang serius, namun tetap 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
Tentu saja, menggunakan
char []
Java untuk menyimpan kata sandi bukanlah obat mujarab. Anda perlu mengambil tindakan pencegahan keamanan, seperti bekerja dengan hash dan mengenkripsi kata sandi daripada menyimpannya dalam teks biasa. Dan tentu saja, hapus dari memori segera setelah prosedur otentikasi.
Berdasarkan materi dari Javarevisited
GO TO FULL VERSION