在java中取消String是一个好习惯

Sud*_*ana 8 java string

我将普通密码作为字符串存储在内存中时出现问题.根据该参考文献,由于字符串是不可变的,因此存在使用字符串数据类型存储在内存中的敏感数据的漏洞.

https://www.geeksforgeeks.org/use-char-array-string-storing-passwords-java/

为什么char []比字符串更适合密码?

我可以通过使字符串变量无效而不是使用char数组或字符串缓冲区/构建器来克服此安全问题.

例如:String password ="password"; password = null;

try*_*arn 8

否.对字符串进行无效化只会使引用脱钩.但该值仍将存在于字符串池中.因为为了节省内存,字符串值保留在字符串池中.

任何潜在的黑客都可以通过访问字符串池来检索值.

然而,使用char [],您可以简单地将该对象视为任何其他对象.并且取消char对象将在垃圾收集时擦除堆中的数据.

更好的选择是使用字节数组.

阅读有关String Constant池的更多信息.

  • 是的。垃圾收集器在字符串池上运行的方式与在其他对象上运行的方式不同。请参阅 /sf/answers/1288495701/ 了解更多信息。 (2认同)
  • 但是,如果它是一个文字或者是`intern()`ed,那么该值只会在String池中.它更多的是控制内存中密码的生命周期.使用`char []`的建议是正确的,但是你需要在使用后删除`char []`,将它设置为null是不够的. (2认同)