我们在 java 中将密码存储为 char 数组,并找到这样做的充分理由。我遇到了一个面试问题,上面写着“如果密码被加密并且我们将其保存在 String 中,可以吗?或者为什么不呢? ”
我能想到的是加密和解密过程涉及某处的纯文本字符串对象,我们又回到了字符串中的相同问题纯文本密码。我对自己的回答不太相信,这可能是什么原因/理由。
我们在 java 中将密码存储为 char 数组,并找到这样做的充分理由。我遇到了一个面试问题,上面写着“如果密码被加密并且我们将其保存在 String 中,可以吗?或者为什么不呢? ”
我能想到的是加密和解密过程涉及某处的纯文本字符串对象,我们又回到了字符串中的相同问题纯文本密码。我对自己的回答不太相信,这可能是什么原因/理由。
这听起来像是一个安全问题。他们可能正在研究使用后覆盖字符数组内存的能力。
一个字符串,是不可变的,会一直留在内存中,直到垃圾收集,然后内存被重用。理论上,内存转储可以找到可以解密和暴露的加密密码。
使用字符数组,一旦完成,您可以覆盖内存,使其不再暴露。当然,它仍然在记忆中很短的时间。
有趣的问题。我能想到不选择字符串而不是 char[] 的主要原因显然是基于“安全性”。
字符串是不可变的
从技术上讲,日志文件安全。例子:
String sPsswrd = "test";
Char[] cPsswrd = new char[]{'t','e','s','t'};
如果这被打印在日志文件的某处,
System.out.println("password as string: "+sPsswrd);
System.out.println("password as Char array "+cPsswrd);
输出:
password as string: test
password as Char array: [@14
如果将密码存储为数组,密码将更加安全。希望这对可能的问题有所了解。