2010-11-24 3 views
1

JPA 구현 및 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(); 
    } 
} 

어떻게 불법 문자 × 00의 사용을 피하거나 문제는 다른 곳에있다 ?

답변

2

바이트로 []을 (를) 문자열로 채우려하고 있습니다. 제대로 작동하지 않습니다.

  1. SHA-1 해시를 BLOB로 유지합니다. 내 머리 위로 떨어져 :
 
    @Lob 
    @Column(nullable = false) 
    private byte[] passwordHash; 
  1. 인코딩 Base64로 같은 16 진수 문자열이나 뭐 같은 중 텍스트 표현으로 바이너리 데이터,. binaryToHexString 또는 base64encoder 용 Google. 올바른 트랙에 배치해야합니다.
+0

감사합니다. Base64 문자열로 변환했습니다. – LeonS

관련 문제