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