2017-02-24 250 views
5

我試圖加密我的prostrgres數據庫中的一列。列名稱是「bytea」類型的「測試」。如何使用Hibernate @ColumnTransformer對Postgres中的列進行加密

我enity代碼如下,

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

當我試圖找回實體,我越來越像下面的加密數據。如何以編程方式獲取解密值?但我得到的實際價值如果我執行postgres選擇查詢。

"test": "\\xc30d04070302474627ea0994ea657bd24401aaa5543862d57524a407e5dbe2ee0f6f0f33ea4f4474f5bc801dca5d32956d41a975505b12ac000f124177bdc2f4507cbfd724d716aaa513ba46f004dfefd3b2b32eb6" 
  • 當我試圖堅持的實體,我得到下面的錯誤。
  • ERROR: column "test" is of type bytea but expression is of type character varying

    +1

    我認爲你反過來放你的函數調用。你應該使用'read =「pgp_sym_decrypt(test,'')」,write =「pgp_sym_encrypt(?,'')」'。 (因爲它在數據庫中加密並且您想在應用程序中解密)。 – pozs

    +0

    但我不確定這是否是嵌入密鑰的正確位置。 – pozs

    回答

    10

    您需要使用pgp_sym_encrypt寫入和pgp_sym_decrypt讀。你做了相反的事情。

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

    事實上,我非常喜歡你的問題,我甚至還有wrote an article about itexample is on GitHub和工作就像一個魅力。

    +0

    感謝您的回答。改變後的同樣問題。而且我想知道,爲什麼我沒有通過我的rest API獲取解密的數據。 –

    +0

    我甚至寫過關於它的博客文章。 –

    相關問題