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:
(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?
Suggerisco di utilizzare http://www.jasypt.org/ – sagneta