我正在使用eclipselink作为JPA实现和PostgreSQL,并希望在数据库中存储SHA-1哈希。 但是我得到了这样的例外:
内部异常:org.postgresql.util.PSQLException:错误:编码“UTF8”的无效字节序列:0x00 错误代码:0 调用:INSERT INTO mbm_user(USERNAME,PRENAME,LASTNAME,PASSWORD)VALUES(?,?,?,?) bind => [Hans,null,null,THE SHA-1 HASH]
SHA-1 HASH是一些乱码,我不能把它们贴在这里。
我的实体:
@Entity
@Table(name="mbm_user")
public class User extends CanAccessBook{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(nullable = false)
private Long id;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String password;
private String prename;
private String lastname;
...
...
}
我生成SHA-1哈希的方法:
public void setPassword(String password) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] encryptPassword = md.digest(password.getBytes());
this.password = new String(encryptPassword);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
如何避免使用非法字符0x00或在其他地方出现问题?
答案 0 :(得分:2)
您正在尝试将一个byte []填充到一个字符串中,该字符串永远不会正常工作。
@Lob @Column(nullable = false) private byte[] passwordHash;