标题几乎总结了一切,尽管我希望得到一个更深入的见解和任何建议,以最好的方式[Salted + Hashed]作为'用户'实体持久存储/存储到DB(JavaDB)之前的密码字段。我目前正在使用JPA作为我的ORM,这是我第一次使用它,所以这里有一点点菜鸟。
我已经完成了一些阅读,从我发现的内容看起来我们在实体中应该有一个标记为@Transient
的方法,在将其存储到数据库之前,[Salted + Hashed]密码。< / p>
请提供任何反馈/示例如何采取行动。
答案 0 :(得分:1)
哈希密码look at bcrypt。
现在您的JPA / ORM问题是您需要两个(或更确切地说是四个)密码字段,具体取决于具体情况:
这种混乱的常见解决方案是将密码作为字节存储在数据库中。
当您需要检查和更改密码时,您需要一个具有更多/不同字段的新对象,其中密码以短文本形式存储(时间很短)。当您需要更新数据库时,您将对密码进行哈希处理,并仅保存哈希函数的结果。
或者换句话说:没有办法将JPA / ORM映射添加到密码字段,以便您可以使用单个setPassword(String)
方法更新它。