2013-02-11 95 views
0

在我們的數據庫中,信用卡號被加密,以便將加密數據存儲在postgresql數據庫中,我們正在按照以下方式進行操作。在postgres中插入加密數據

\set pubkey '''' `sed -e "s/'/''/g" -e 's/\\n/\\r\\n/g' -e 's/\\/\\\\/g' < /home/vinit/fnpub.key` '''' 

\set pvtkey '''' `sed -e "s/'/''/g" -e 's/\\n/\\r\\n/g' -e 's/\\/\\\\/g' < /home/vinit/fnpvt.key` '''' 

select pgp_pub_decrypt(number, dearmor(:pvtkey),'testypassword') from payment_detail limit 2; 

應用程序正在使用hibernate,如何使用加密插入數據並使用hibernate讀取解密的數據?

謝謝!

回答

0

首先,我認爲您的密鑰管理有很多不足之處。您將在密鑰管理方面遇到很多問題。通過閱讀克雷格出色的答覆我關於這個問題,請啓動:https://dba.stackexchange.com/questions/35296/database-encryption-and-key-management-with-pg-crypto

在你應該在什麼地方存儲在數據庫中的用戶密鑰這種情況下,通過口令保護,然後使用這些爲信用加密對稱密鑰卡號。然後您可以使用公鑰對這些密鑰進行加密,以確保只有授權用戶才能訪問它們。事實是,你將不得不在某處存儲密鑰。

現在在我的應用程序中,我們預計只有兩三個人有權訪問,每個人都可以訪問所有密碼。因此,加密密碼的查詢如下所示:

SELECT pgp_sym_encrypt($1, -- new password 
        pgp_pub_decrypt(last_resort_key, 
            pgp_sym_decrypt_bytea(priv_key, $2) -- current passphrase 
       )) 
    FROM user_key 
WHERE login = session_user; 

(在此處使用libpq格式)。請注意,我們使用pg用戶作爲應用用戶。

一旦你在數據庫中有相關的數據,你的sql查詢可以相對直接地寫。

請注意,錯誤日誌可能會揭示密鑰或更糟。您可能希望保留儘可能少的原木,並儘可能少地保留原木