gpt4 book ai didi

exception - 使用 EclipseLink 和 PostgreSQL 存储 SHA-1 哈希

转载 作者:行者123 更新时间:2023-11-29 13:07:23 27 4
gpt4 key购买 nike

我正在使用 eclipselink 作为 JPA 实现和 PostgreSQL,并希望将 SHA-1 哈希存储在数据库中。但是我遇到了这样的异常:

Internal Exception: org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00 Error Code: 0 Call: INSERT INTO mbm_user (USERNAME, PRENAME, LASTNAME, PASSWORD) VALUES (?, ?, ?, ?) bind => [Hans, null, null, THE SHA-1 HASH]

SHA-1 哈希是一些乱码,我无法将它们粘贴到这里。

我的实体:

@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 还是其他地方的问题?

最佳答案

您正试图将一个 byte[] 塞进一个字符串中,这永远不会很好地工作。

  1. 将 SHA-1 散列保存为一个 blob。在我的脑海中:
    @Lob    @Column(nullable = false)    private byte[] passwordHash;
  1. 将二进制数据编码为文本表示形式,可以是十六进制字符串,也可以是 Base64 之类的东西。谷歌 binaryToHexString 或 base64encoder,这应该会让你走上正轨。

关于exception - 使用 EclipseLink 和 PostgreSQL 存储 SHA-1 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4265185/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com