我们将密码存储为java中的char数组,并找到理由。我遇到一个面试问题,说明" 如果密码加密怎么办,我们将其保存在String中,这样可以吗?或者为什么不呢?"
我能想到的是加密和解密过程涉及纯文本字符串对象,我们回到同一问题字符串中的纯文本密码。对我自己的答案不太相信,这可能是理由/理由。
答案 0 :(得分:1)
这听起来像是一个安全问题。他们可能正在研究一旦使用它就会覆盖字符数组的内存。
一个不可变的字符串将在内存中保留,直到收集垃圾,然后重用内存。理论上,内存转储可以找到加密的密码,该密码可以被解密和暴露。
使用字符数组,完成后,您可以覆盖内存,使其不再可以暴露。当然,它仍然在记忆中很短的时间。
答案 1 :(得分:0)
有趣的问题。我认为不在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
如果密码存储为数组,密码将更安全。希望这能对可能存在的问题有所了解。