在Java中取消字符串是一个很好的做法吗?

Is it a good practice to nullifying String in java

本问题已经有最佳答案,请猛点这里访问。

我在将普通密码作为字符串存储在内存中时遇到问题。根据引用,由于字符串是不可变的,因此在内存中使用字符串数据类型存储敏感数据存在漏洞。

https://www.geeksforgeks.org/use-char-array-string-storeing-passwords-java/

为什么在密码方面,char[]比string更受欢迎?

我可以通过取消字符串变量而不是使用char数组或字符串缓冲区/生成器来解决这个安全问题。

例如:string password="password";密码=空;


不。取消字符串只会取消引用的链接。但该值仍将存在于字符串池中。因为为了节省内存,字符串值保留在字符串池中。

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

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

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

阅读有关字符串常量池的更多信息。


如果你想要绝对的安全性,不。取消字符串不是正确的解决方案。

这样做的原因是,取消它并不能保证字符串不再可用。虽然这可能会使它更容易被垃圾收集(这只是一个"可能"),但无法保证何时(甚至何时)将被垃圾收集。

您应该使用字节数组或char数组,然后在完成后将数组中的每个元素都设为空。