【发布时间】:2018-08-21 07:23:30
【问题描述】:
我在将纯密码作为字符串存储在内存中时遇到问题。根据参考资料,由于字符串是不可变的,因此存在使用字符串数据类型将敏感数据存储在内存中的漏洞。
https://www.geeksforgeeks.org/use-char-array-string-storing-passwords-java/
Why is char[] preferred over String for passwords?
我可以通过取消字符串变量而不是使用字符数组或字符串缓冲区/构建器来克服这个安全问题吗?
例如:字符串密码=“密码”; 密码=空;
【问题讨论】:
-
你的密码应该是一个字符数组
-
使用字节数组?
-
您无法通过使字符串变量无效来解决该问题,因为它不会从字符串常量池中删除该字符串对象,您只是分配了空“密码”而不是从内存中删除实际密码..
-
清空字符串肯定有助于解决内存泄漏问题,但字符串仍将存在于 Java 字符串池中,尽管您无法访问字符串池,因为它是由 java 私下维护的。最好使用字节数组或字符数组,并应用适当的加密,以防您想让事情变得更加安全。