¿Por qué usar la array char[] sobre una string para almacenar contraseñas en Java?

1. Las strings son inmutables:   las strings son inmutables en Java y, por lo tanto, si una contraseña se almacena como texto sin formato, estará disponible en la memoria hasta que el recolector de basura la borre y como las strings se usan en el grupo de strings para su reutilización, hay muchas posibilidades de que permanecerá en la memoria durante mucho tiempo, lo cual es una amenaza para la seguridad. Las strings son inmutables y no hay forma de que el contenido de las strings se pueda cambiar porque cualquier cambio producirá una nueva string. 
Dentro de una array, los datos se pueden borrar explícitamente una vez que se completa su trabajo. La array se puede sobrescribir y la contraseña no estará presente en ninguna parte del sistema, incluso antes de la recolección de elementos no utilizados.

2. Seguridad:  cualquiera que tenga acceso al volcado de memoria puede encontrar la contraseña en texto sin cifrar y esa es otra razón para usar una contraseña cifrada en lugar de texto sin formato. Por lo tanto, almacenar la contraseña en una array de caracteres mitiga claramente el riesgo de seguridad de robar la contraseña. 

3. Seguridad del archivo de registro: con una array, uno puede borrar explícitamente los datos, sobrescribir la array y la contraseña no estará presente en ninguna parte del sistema. 
Con String simple, hay muchas más posibilidades de imprimir accidentalmente la contraseña en registros, monitores o algún otro lugar inseguro. char[] es menos vulnerable.

Java

//Java program to illustrate preferring char[] arrays
//over strings for passwords in Java
public class PasswordPreference
{
  
    public static void main(String[] args)
    {
  
        String strPwd = "password";
        char[] charPwd = new char[] {'p','a','s','s','w','o','r','d'};
         
        System.out.println("String password: " + strPwd );
        System.out.println("Character password: " + charPwd );
    }
}

Producción: 

String password: password
Character password: [C@15db9742

4. Recomendación de Java: Java tiene métodos como JPasswordField de javax.swing como el método public String getText() que devuelve String está en desuso de Java 2 y se reemplaza por public char[] getPassword() que devuelve Char Array.

Este artículo es una contribución de Kanika Tyagi . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *