2013-02-11 99 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查询可以相对直接地写。

请注意,错误日志可能会揭示密钥或更糟。您可能希望保留尽可能少的原木,并尽可能少地保留原木