我有以下代码
public static void main(String[] args) {
String plainTextpassword = "plaintextpassword";
String encryptedPassword = getMd5Password(plainTextpassword);
}
是否有人可以在收集垃圾之前使用内存转储或任何方式获取我的密码。如果是这样我就能克服它。
答案 0 :(得分:1)
是否有人可以在收集垃圾之前使用内存转储或任何方式获取我的密码
是的,即使在垃圾收集之后也是可能的,因为内存的内容不会立即被覆盖。这是坏消息。
好消息是,操作系统应该分隔进程之间的地址空间。我写道应该,因为偶尔会发现一些可以被利用来克服这种分离的错误;但是,如果发现这样的错误,密码保护是您遇到的最小问题。所以我不担心。
所以最严重的事情是,你自己的程序过程中的某些东西会变得很糟糕。这可能是由于您的代码中的错误或因为您使用某些库存在一些错误。但是,如果您的程序没有错误(虽然非常不可能),并且您的操作系统没有错误(也不太可能,但更可能比您自己的程序没有错误),那么您的密码应该是安全的。
答案 1 :(得分:0)
根据我收集的事实,使用char数组(char [])是存储密码的最佳做法,因为,
“由于字符串是不可变的,所以不能更改字符串的内容,因为任何更改都会产生新的字符串,而如果你使用char [],你仍然可以将所有元素设置为空或零。所以在字符数组中存储密码显然可以降低窃取密码的安全风险。“