Java字符串与字符数组

Java字符串与字符数组,java,arrays,string,security,char,Java,Arrays,String,Security,Char,如果我在应用程序中处理密码,是否绝对有必要使用char数组而不是String对象?如果我的应用程序被配置为不写日志或任何东西,并且内存转储是最不可能发生的,那么使用String对象会不会太轻率 如果我可以使用字符串对象,这将是有益的,因为这样我就可以使用库jBCrypt,否则我将无法使用它。这取决于您希望应用程序具有多大的安全性。在大多数情况下,我想你可以使用字符串。特别是如果您没有转储任何可能包含此字符串的输出 但是,这确实会使您的应用程序稍微不安全。有关更多信息,请参阅本文:???为什么有此

如果我在应用程序中处理密码,是否绝对有必要使用char数组而不是String对象?如果我的应用程序被配置为不写日志或任何东西,并且内存转储是最不可能发生的,那么使用String对象会不会太轻率


如果我可以使用字符串对象,这将是有益的,因为这样我就可以使用库jBCrypt,否则我将无法使用它。

这取决于您希望应用程序具有多大的安全性。在大多数情况下,我想你可以使用字符串。特别是如果您没有转储任何可能包含此字符串的输出


但是,这确实会使您的应用程序稍微不安全。有关更多信息,请参阅本文:

???为什么有此必要?@brso05因为字符串是内部的,因此密码可能会保存在内存中。使用char数组,您可以立即将所有值设置为0,并在完成所需密码时销毁密码。有了这个字符串,您就可以让系统在垃圾收集中处理它了。@IngoBürk根据您可能希望使用char[]的原因而不是字符串,不是因为字符串没有GC'd,而是因为您可以在使用完字符数组后手动对其进行置乱/擦除,而使用字符串时必须等待GC。我不建议使用System.GC。它可能会大大降低您的程序的速度,而且实际上也不能保证您的字符串会立即得到GC'd。如果您真的害怕安全问题,并且无法使用字符串,我想您可以使用反射来删除正在使用的字符串的内容,尽管请注意该问题的答案,即如果有人首先可以使用char[]读取您的内存或者说,清除字符串对你没有帮助,而我不是安全专家,他们可能会说:没有比这更不安全的了。只有安全和不安全。@IngoBürk一个真正的安全专家会知道这是一个梯度谱,因为世界上唯一安全的机器是一个在保险库中且未插入的机器。@IngoBürk-只要没有日志记录和内存转储,使用字符串是安全的吗?