关于java:将null赋给string var以删除敏感数据

Assign null to string var to remove sensitive data

通过这里的一些强化发现,它告诉我不要对敏感数据使用字符串数据类型,因为它们在内存中的停留时间太长。如果发生不相关的内存攻击(如心血),这将暴露用户的数据。

如果我在使用后将字符串var设置为空,那么该内存位置实际上是被清除了,还是创建了一个var副本来存储空值?

谢谢


我认为你问错了问题。

如果您将变量设置为空,那么当然,该引用指向空。原始值可以被垃圾收集。

问题是字符串比这要复杂一些。你应该问的问题是,为什么弦能留在记忆中?

对此的一个答案是字符串文本池。谷歌是你的朋友,但这是一个不错的开端:

什么是Java字符串池,"S"如何与新字符串("S")不同?

何时用Java垃圾回收字符串

字符串文本的垃圾收集


如果您将String引用设置为空,那么它可能无法从实际内存中删除,并且可能对潜在的黑客可用。

您可以使用Char[]并将其设置为空/无效字符以避免此问题,而且最好始终将sensitive数据保持为encrypted格式。