2010-11-24 4 views
1

J'utilise eclipselink comme implémentation JPA et PostgreSQL et je veux stocker SHA-1 Hashes dans la base de données. Mais je reçois une exception comme ceci:stocker des hachages SHA-1 avec EclipseLink & PostgreSQL

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]

HASH SHA-1 sont des charabia et caractères je ne peux pas les coller ici.

Mon entité:

@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; 
     ... 
     ... 
} 

Et la méthode où je produis le SHA-1 Hash:

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(); 
    } 
} 

Comment éviter l'utilisation du charbon illégale 0x00 ou est le problème ailleurs ?

Répondre

2

Vous essayez de placer un octet [] dans une chaîne, ce qui ne fonctionnera jamais correctement.

  1. Persistez le hachage SHA-1 sous forme de blob. Du haut de ma tête:
 
    @Lob 
    @Column(nullable = false) 
    private byte[] passwordHash; 
  1. Encode les données binaires dans une représentation textuelle, soit sous forme de chaîne hexadécimale ou quelque chose comme base64. Google pour binaryToHexString ou base64encoder, cela devrait vous mettre sur la bonne voie.
+0

Merci, je l'ai converti en une chaîne Base64, c'est tout. – LeonS

Questions connexes