2013-06-04 14 views
10

Ho una colonna di database che deve essere crittografata, quando viene passata da una webapp di ibernazione. La webapp è su tomcat 6, Hibernate 4 e Mysql come backing store.Sospensione - Memorizza una colonna come crittografata e decrittografa solo in fase di esecuzione

Il problema è tuttavia che la password per crittografare/decodificare questo campo sarà disponibile solo in fase di esecuzione del programma. Inizialmente avevo sperato di utilizzare i metodi AES_ENCRYPT/decifrare, delineato abbastanza bene qui:

DataBase encryption in Hibernate

e qui:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#mapping-column-read-and-write

(Anche se questo si riferisce alla versione 3.6 di Hibernate, ho credo che dovrebbe essere lo stesso in 4.0).

Tuttavia, dal momento che questo usa la seguente notazione:

@Column(columnDefinition= "LONGBLOB", name="encryptedBody") 
@ColumnTransformer(
    read="AES_DECRYPT(encryptedBody, 'password')", 
    write="AES_ENCRYPT(?, 'password')") 
public byte[] getEncryptedBody() { 
    return encryptedBody; 
} 

public void setEncryptedBody(byte[] encryptedBody) { 
    this.encryptedBody = encryptedBody; 
} 

Ciò richiede che la password essere specificato nel annotazioni per sé, e non può essere una variabile.

C'è un modo per utilizzare i metodi del database attraverso la sospensione in questo modo, ma con la password come variabile? C'è un approccio migliore?

+0

Suggerisco di utilizzare http://www.jasypt.org/ – sagneta

risposta

2

Attualmente non esiste un modo per parametrizzare i pezzi dei frammenti di lettura/scrittura. Sono più intese come soluzioni per scopi generali. Abbiamo discusso dell'aggiunta del supporto per @Encrypted in Hibernate che agisce più o meno come suggerisci tu. @Encrypted darebbe maggiore flessibilità, come crypto in-vm rispetto a crypto in-db, parametrizzazione, ecc.

JPA 2.1 ha anche una funzione che è possibile utilizzare, denominata convertitori di attributi. Potrebbero tuttavia applicare la crittografia in-vm.

Problemi correlati