加密/解密实体'密码'插入前的字段 - JPA

时间:2014-10-24 13:22:45

标签: java java-ee jpa encryption

标题几乎总结了一切,尽管我希望得到一个更深入的见解和任何建议,以最好的方式[Salted + Hashed]作为'用户'实体持久存储/存储到DB(JavaDB)之前的密码字段。我目前正在使用JPA作为我的ORM,这是我第一次使用它,所以这里有一点点菜鸟。

我已经完成了一些阅读,从我发现的内容看起来我们在实体中应该有一个标记为@Transient的方法,在将其存储到数据库之前,[Salted + Hashed]密码。< / p>

请提供任何反馈/示例如何采取行动。

1 个答案:

答案 0 :(得分:1)

哈希密码look at bcrypt

现在您的JPA / ORM问题是您需要两个(或更确切地说是四个)密码字段,具体取决于具体情况:

  1. 包含当前密码的字段
  2. 登录时验证密码的字段
  3. 当用户想要更改旧密码时存储旧密码的字段(可以与#2相同)
  4. 用户更改密码时存储新密码的字段
  5. 重复新密码的字段
  6. 这种混乱的常见解决方案是将密码作为字节存储在数据库中。

    当您需要检查和更改密码时,您需要一个具有更多/不同字段的新对象,其中密码以短文本形式存储(时间很短)。当您需要更新数据库时,您将对密码进行哈希处理,并仅保存哈希函数的结果。

    或者换句话说:没有办法将JPA / ORM映射添加到密码字段,以便您可以使用单个setPassword(String)方法更新它。