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