建议将密码存储在char []而不是String中,因为字符串存储在StringPool中。 Read more here
根据this question StringPool中的字符串不能直接使用。 要在Stringpool中获取字符串,我们需要一个密码字典来在StringPool中检查它们。如果我们有一个密码字典,我们不需要担心StringPool,我们无论如何都可以直接尝试密码字段。
那么,为什么我们不应该使用“String”作为密码的数据类型?
编辑:
获得的答案是:我们可以访问内存转储并访问stringpool中的字符串。
跟进问题:
答案 0 :(得分:0)
String在java中是不可变的并存储在String池中。 一旦它被创建,它将保留在池中,直到除非收集垃圾,所以即使我们已经完成了密码,它在内存中可用的时间更长,并且没有办法避免它。这是一个安全风险,因为任何有权访问内存转储的人都可以找到明文密码。
如果我们使用char数组来存储密码,我们可以在完成后将其设置为空白。因此,我们可以控制内存中可用的时间,以避免使用String
的安全威胁