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