Tüm nedenler, bir şifre için String yerine bir char [] dizisi seçmelisiniz .
1. Dizeler Java ile değiştirilemediğinden, parolayı düz metin olarak saklarsanız, Çöp toplayıcı temizlenene kadar bellekte kullanılabilir olur ve String, String havuzunda yeniden kullanılabilirlik için kullanıldığından, bir güvenlik tehdidi oluşturan uzun süre hafızada kalır.
Bellek dökümüne erişimi olan herkes parolayı düz metin olarak bulabildiğinden, bu nedenle düz metin yerine her zaman şifreli bir parola kullanmanız gerekir. Dizeler değişmez olduğu için, Dizelerin içeriğinin değiştirilmesinin bir yolu yoktur, çünkü herhangi bir değişiklik yeni bir Dize üretirken, bir char [] kullanırsanız tüm öğeleri yine de boş veya sıfır olarak ayarlayabilirsiniz. Dolayısıyla, bir şifreyi bir karakter dizisinde saklamak, bir şifreyi çalmanın güvenlik riskini açıkça azaltır.
2. Java, güvenlik nedenlerini açık bir şekilde parolaları döndüren kullanımdan kaldırılmış getText () yöntemi yerine, char [] döndüren JPasswordField öğesinin getPassword () yöntemini kullanmanızı önerir. Java ekibinin tavsiyelerine uymak ve onlara karşı olmak yerine standartlara uymak iyidir.
3. String ile her zaman bir günlük dosyasına veya konsola düz metin yazdırma riski vardır, ancak Array kullanırsanız bir dizinin içeriğini yazdırmazsınız, bunun yerine bellek konumu yazdırılır. Gerçek bir neden olmasa da, yine de mantıklı.
String strPassword="Unknown";
char[] charPassword= new char[]{'U','n','k','w','o','n'};
System.out.println("String password: " + strPassword);
System.out.println("Character password: " + charPassword);
String password: Unknown
Character password: [C@110b053
Bu blogdan referans alındı . Umarım bu yardımcı olur.