2. Pourquoi char array est plus approprié pour stocker des mots de passe que String en Java

Un autre problème Java délicat basé sur String, je pense que seuls quelques programmeurs Java peuvent répondre correctement à cette question. Il s'agit d'une question d'entretien Java de base très difficile, et une solide connaissance de String est nécessaire pour répondre à cette question.

C'est une question que j'ai posée à un de mes amis dans une interview Java récemment. Il est interviewé pour le poste de directeur technique et possède plus de 6 ans d'expérience. Si vous n'avez pas rencontré cette situation, des tableaux de caractères et des chaînes peuvent être utilisés pour stocker des données texte, mais il est difficile de choisir l'un par rapport à l'autre. Mais comme mon ami l'a dit, toute question liée à une chaîne doit avoir des indices sur les propriétés spéciales de la chaîne, telles que l'immuabilité, et il l'utilise pour convaincre le questionneur. Ici, nous allons explorer certaines des raisons pour lesquelles vous devriez utiliser char [] pour stocker les mots de passe au lieu de String.

Chaîne:

1) Étant donné que les chaînes sont immuables en Java, si vous stockez le mot de passe sous forme de texte brut, il sera disponible en mémoire jusqu'à ce que le ramasse-miettes l'efface. Et pour la réutilisation, il y aura String dans le pool de chaînes. la mémoire pendant une longue période, posant ainsi une menace pour la sécurité.

Étant donné que toute personne ayant accès au vidage de la mémoire peut trouver le mot de passe en texte clair, c'est une autre raison, vous devez toujours utiliser des mots de passe cryptés au lieu du texte brut. Étant donné que la chaîne est immuable, le contenu de la chaîne ne peut pas être modifié, car toute modification produira une nouvelle chaîne, et si vous utilisez char [], vous pouvez définir tous les éléments sur des blancs ou des zéros. Par conséquent, le stockage des mots de passe dans des tableaux de caractères peut réduire considérablement le risque de sécurité lié au vol de mots de passe.

2) Java lui-même recommande d'utiliser la méthode getPassword () de JPasswordField, qui renvoie un char [] et la méthode obsolète getTex (), qui renvoie le mot de passe en texte brut, pour des raisons de sécurité. Suivez les recommandations de l'équipe Java et respectez la norme au lieu de vous y opposer.

3) Lors de l'utilisation de String, il y a toujours le risque d'imprimer du texte brut dans le fichier journal ou la console, mais si vous utilisez Array, le contenu du tableau ne sera pas imprimé mais son emplacement mémoire. Bien que ce ne soit pas une vraie raison, cela a toujours du sens.

String strPassword =“Unknown”; 
char [] charPassword = new char [] {'U','n','k','w','o','n'}; 
System.out.println(“字符密码:”+ strPassword);
System.out.println(“字符密码:”+ charPassword);

Sortir

Mot de passe de chaîne: Mot de passe de
caractère inconnu : [C @ 110b053
Je recommande également d'utiliser un mot de passe haché ou chiffré au lieu de texte brut, et de l'effacer de la mémoire immédiatement après la vérification. Par conséquent, en Java, l'utilisation de tableaux de caractères pour stocker les mots de passe est un meilleur choix que les chaînes de caractères. Bien que n'utiliser que char [] ne soit pas suffisant, vous devez également effacer le contenu pour être plus sûr

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45627031/article/details/112852627
conseillé
Classement