【发布时间】:2014-12-15 18:24:24
【问题描述】:
如果我在我的应用程序中处理密码,我绝对有必要使用 char 数组而不是 String 对象吗?如果我的应用程序配置为不写入日志或任何内容,并且最不希望出现内存转储,那么使用 String 对象是否过于轻率?
如果我可以使用 String 对象将是有益的,因为这样我就可以使用我无法使用的库 (jBCrypt)。
【问题讨论】:
-
???为什么有必要?
-
@brso05 因为字符串是内部的,所以密码可能会保存在内存中。
-
使用 char 数组,您可以立即将所有值设置为 0,并在完成所需的密码后销毁密码。使用字符串,您将把它留给系统在垃圾收集中处理它。
-
@IngoBürk 根据stackoverflow.com/questions/8881291/…,您可能想要使用
char[]而不是String的原因不是因为字符串不会被GC'd,而是因为您可以手动加扰/擦除使用完字符数组,而字符串则必须等待GC。 -
我不建议这样做
System.gc()。它可能会大大降低您的程序速度,并且实际上并不能保证您的字符串会立即被 GC 处理。如果您真的害怕安全问题并且被字符串卡住了,我想您可以使用反射来擦除您正在使用的字符串的内容stackoverflow.com/questions/17151382/… 尽管请注意该问题的答案说如果有人可以首先读取您的记忆使用char[]或清除字符串对您没有帮助
标签: java arrays string security char