2

我是 Java 加密的新手,我需要你的帮助。我想用mysql和JPA实体UserRecord实现一个简单的登录系统:

    @Entity
    public class UserRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;
    @Column(unique=true)
    private String username;
    private String password;

现在,对系统保密的最佳方法是什么?我认为,在将输入与数据库记录进行比较时,我必须加密密码并设法解密它。在 JPA 中是否有一些特殊的方法可以做到这一点?我不想创造任何困难,它只是为了我的学习问题。唯一的要求:必须加盐(?)。请给我建议好吗?

非常感谢!

4

1 回答 1

4

密码必须在您的数据库中加密......最好不能解密它!这意味着当加密你的密码时,你必须丢失一些信息,这样就不可能从它的加密形式中计算出原始密码。(有很多算法可以做到这一点,比如PBKDF2,...)。(Java 中的示例 PBKDF2

使用盐意味着您将在用户创建帐户时将随机字符串(它是盐)附加到密码。您将将此随机字符串存储在用户表中(就像加密的密码一样)。

在登录时验证用户密码:

  • 查找为尝试登录的用户生成的盐。
  • 运行加密算法password+salt
  • 将结果与存储在 DB 中的加密密码进行比较:如果它们匹配,则密码正确。

这是包含更多详细信息和示例代码的链接。

顺便说一句:这个问题与 JPA 无关。AFAIK:在 JPA 规范中没有与加密相关的内容。

于 2013-09-12T14:54:01.893 回答