2010-11-24 13 views
1

私はJPA ImplementationとPostgreSQLとしてeclipselinkを使用しており、データベースにSHA-1ハッシュを保存したいと考えています。 しかし、私はこのような例外を取得しています:SHA-1ハッシュを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]

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の使用を避けることができるか、問題がどこか別の場所であります?

答えて

2

文字列にバイト[]を入れようとしていますが、これはうまく動作しません。

  1. SHA-1ハッシュをblobとして保持します。私の頭の上から:
 
    @Lob 
    @Column(nullable = false) 
    private byte[] passwordHash; 
  1. いずれかの16進数の文字列またはBase64のようなものとして、テキスト表現にバイナリデータをエンコードします。 GoogleはbinaryToHexStringまたはbase64encoderのために、適切なトラックに置く必要があります。
+0

ありがとう、私はそれをBase64 Stringに変換しました。 – LeonS

関連する問題