นี่คือเหตุผลทั้งหมดที่ควรเลือกอาร์เรย์[]แทนที่จะเป็นสตริงสำหรับรหัสผ่าน
1. Strings นั้นไม่เปลี่ยนรูปแบบใน Java ถ้าคุณเก็บรหัสผ่านเป็นข้อความธรรมดามันจะมีอยู่ในหน่วยความจำจนกว่า Garbage Collector จะล้างมันและเนื่องจาก String ถูกใช้ใน Pool pool เพื่อให้สามารถนำมาใช้ใหม่ได้ ยังคงอยู่ในหน่วยความจำเป็นเวลานานซึ่งก่อให้เกิดภัยคุกคามความปลอดภัย
เนื่องจากทุกคนที่สามารถเข้าถึงการถ่ายโอนข้อมูลหน่วยความจำสามารถค้นหารหัสผ่านในข้อความที่ชัดเจนนั่นเป็นอีกเหตุผลหนึ่งที่คุณควรใช้รหัสผ่านที่เข้ารหัสแทนที่จะเป็นข้อความธรรมดา เนื่องจาก Strings ไม่สามารถเปลี่ยนแปลงได้จึงไม่มีทางที่เนื้อหาของ Strings สามารถเปลี่ยนแปลงได้เนื่องจากการเปลี่ยนแปลงใด ๆ ที่จะสร้างสตริงใหม่ในขณะที่ถ้าคุณใช้อักขระ [] คุณยังคงสามารถตั้งค่าองค์ประกอบทั้งหมดเป็นค่าว่างหรือเป็นศูนย์ได้ ดังนั้นการจัดเก็บรหัสผ่านในอาเรย์อักขระจะช่วยลดความเสี่ยงด้านความปลอดภัยในการขโมยรหัสผ่านได้อย่างชัดเจน
2. Java แนะนำให้ใช้เมธอด getPassword () ของ JPasswordField ซึ่งส่งคืนอักขระ char [] แทนเมธอด getText () ที่เลิกใช้แล้วซึ่งส่งคืนรหัสผ่านในรูปแบบข้อความที่ชัดเจนด้วยเหตุผลด้านความปลอดภัย เป็นการดีที่จะทำตามคำแนะนำจากทีม Java และยึดมั่นในมาตรฐานแทนที่จะไปเทียบกับพวกเขา
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("Character password: " + charPassword);
String password: Unknown
Character password: [C@110b053
อ้างอิงจากบล็อกนี้ ฉันหวังว่านี่จะช่วยได้.