【发布时间】:2015-03-04 05:06:23
【问题描述】:
建议将密码存储在 char[] 而不是 String 中,因为 Strings 存储在 StringPool 中。 Read more here
根据this question StringPool 中的字符串不能直接使用。 要在 Stringpool 中获取字符串,我们需要一个密码字典来在 StringPool 中检查它们。如果我们有密码字典,我们不需要担心 StringPool,我们可以直接在密码字段上尝试。
那么,为什么我们不应该使用“字符串”作为密码的数据类型呢?
编辑:
得到的答案是:我们可以访问内存转储并访问字符串池中的字符串。
跟进问题:
- 如何访问内存转储?
- 可以阻止访问吗?
- 如果阻止访问内存转储,使用字符串作为密码类型是否安全?
【问题讨论】:
-
感谢@Ruchira 让我知道重复。但是,我脑海中的问题仍然不清楚。我已修改问题,请删除重复标记
-
现在你的答案在这里。stackoverflow.com/questions/8881291/…
-
酷。我现在的问题是“如果另一个进程可以转储内存”,进程如何转储包含字符串池的内存?并对现有字符串进行相同的分析?
-
stackoverflow.com/questions/12018675/… 这回答了一点,但答案没有解释清楚。另外,我想使用 Java 代码本身,而不是任何外部工具
-
“StringPool”是什么意思? StringPool 是 Java 编译器从源代码中保存常量的地方。因此,如果您在 StringPool 中有密码,那么这意味着您的密码已硬编码在 java 源文件中。你不应该这样做既不作为字符串也不作为字符数组。
标签: java string security passwords jvm