在阅读了这个美丽的问题之后:为什么 char[] 优于 String 的密码?,我很好奇这如何应用于基于 servlet 的 Web 应用程序。假设您的 UI 有一些密码输入字段,密码将可以检索request.getParameter("passwordFieldName"),返回一个String. 即使您随后将其转换为 a char[],您也必须等待 GC 清除该String对象。
此外,我正在研究用于密码散列的许多加密/散列库都有一个方法,例如checkPassword(plaintext, hashed),如果输入的纯文本字符串给出的散列等于hashed. 有了这个,即使你有一个char[],你仍然需要使用new String(char[])构造函数将数组转换为 String 。
在我看来,您似乎无法避免将密码作为字符串与其存储的表示进行比较。如果您担心在那个小窗口期间发生攻击,您如何保护自己?