Java Spring Boot 框架,使用 char[] 保存传来的密码参数。避免内存回收与字符串对象相关的安全问题。
每保存新密码时,使用安全随机数,生成一串随机字节数组,作为“盐”(salt)。密码的散列计算结果,与盐,保存在数据库的用户表里;或者对盐做独立保存,增强安全性。
密码取编码后的字符数组,做 SHA 散列计算,加上“盐”数组,再做散列计算,再对散列值结果,重复计算 1024 次,或更多次,或更少次。
验证密码时,也对传入的密码做同样计算,再在数据库里查询用户名和密码计算结果相同的航。(避免可根据返回时间,判断用户是否存在或密码值的)