为什么在Java中使用字符串上的char[]数组来存储密码?

1.字符串是不可变的: 字符串在Java中是不可变的,因此,如果密码以纯文本形式存储,它将在内存中可用,直到垃圾收集器清除它为止。由于字符串在字符串池中用于可重用性,它很可能会在内存中长时间保留,这是一种安全威胁。字符串是不可变的,字符串的内容无法更改,因为任何更改都会生成新字符串。 使用数组,数据可以在其工作完成后显式地从数据中删除。即使在垃圾收集之前,数组也可以被覆盖,密码也不会出现在系统中的任何地方。

null

2.安全: 任何有权访问内存转储的人都可以在明文中找到密码,这是使用加密密码而不是明文的另一个原因。所以,将密码存储在字符数组中明显降低了窃取密码的安全风险。

3.日志文件安全: 使用数组,可以显式地擦除数据,覆盖数组,密码将不会出现在系统中的任何地方。 使用纯字符串时,意外地将密码打印到日志、监视器或其他不安全的地方的几率要高得多。char[]不那么容易受到攻击。

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 );
}
}


输出:

String password: passwordCharacter password: [C@15db9742

4.Java建议: Java有像javax的JPasswordField这样的方法。swing作为返回字符串的方法public String getText()在Java 2中已被弃用,并被返回字符数组的public char[]getPassword()所取代。

本文由 卡尼卡·蒂亚吉 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以写一篇文章,然后将文章邮寄给评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享