我是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中是否有一些特殊的方法可以做到这一点?我想创造一点困难,这只是为了我的学习问题。唯一的要求是:必须加盐(?)。你能告诉我吗?
非常感谢!
答案 0 :(得分:3)
密码必须在您的数据库中加密......最好不能解密它!这意味着在加密密码时,您必须丢失一些信息,以便无法从其加密形式计算原始密码。 (有很多算法可以做PBKDF2,...)。 (Sample PBKDF2 in java)
使用salt意味着当用户创建帐户时,您将随机字符串(它是盐)附加到密码。您将此随机字符串存储在用户表中(就像加密密码一样)。
在登录时验证用户密码:
password+salt
以下是link,其中包含更多详细信息和示例代码。
顺便说一句:这个问题与JPA没什么关系。 AFAIK:JPA规范中没有任何与加密相关的内容。