2017-02-24 125 views
5

'u kullanarak bir sütunu nasıl şifreleyeceğim Bir progrgres DB'mde bir sütunu şifrelemeye çalışıyorum. Sütun adı "bytea" türünde "test" dir. Ben varlık almaya çalıştığımda My Enity kod aşağıdaPostgre'lerde Hibernate @ ColumnTransformer

,

@ColumnTransformer(
      forColumn="test", 
      read="pgp_sym_encrypt(test::bytea, 'mySecretKey')", 
      write="pgp_sym_decrypt(?, 'mySecretKey')") 
private String test; 

, aşağıda gibi şifreli veriyi alıyorum. Şifresi çözülmüş değeri program aracılığıyla nasıl alabilirim? Ama gerçek değeri alıyorum Eğer bir postgres seçme sorgusu yürütürsem.

"test": "\\xc30d04070302474627ea0994ea657bd24401aaa5543862d57524a407e5dbe2ee0f6f0f33ea4f4474f5bc801dca5d32956d41a975505b12ac000f124177bdc2f4507cbfd724d716aaa513ba46f004dfefd3b2b32eb6" 
  1. ben varlık devam çalışıyorum, ben aşağıdaki hatayı alıyorum.

ERROR: column "test" is of type bytea but expression is of type character varying

+1

Fonksiyon çağrılarınızı tersine yerleştirdiğinizi düşünüyorum. Read = "pgp_sym_decrypt (test, '')", write = "pgp_sym_encrypt (?, '')" 'gibi bir şey kullanmalısınız. (Çünkü DB'de şifrelenir ve uygulamanızda şifresi çözülür). – pozs

+0

Ama yine de anahtarınızı gömmek için doğru yer burası emin değilim. – pozs

cevap

10

mesajı okuma yazma için pgp_sym_encrypt ve pgp_sym_decrypt kullanmak gerekir. Tam tersini yaptın.

@ColumnTransformer(
      forColumn="test", 
      read="pgp_sym_decrypt(test::bytea, 'mySecretKey')", 
      write="pgp_sym_encrypt(?, 'mySecretKey')") 
private String test; 

Aslında, ben bile wrote an article about it çok soru sevdim. example is on GitHub ve cazibe gibi çalışıyor.

+0

Yanıtladığınız için teşekkür ederiz. Değişiklikten sonra aynı sorun. Ve ayrıca merak ediyorum, neden dinlenmiş API'm aracılığıyla şifresi çözülmüş veriyi alamıyorum. –

+0

Bu konuda bir blog yazısı bile yazdım. –