在postgres中插入加密数据

时间:2013-02-11 14:51:13

标签: hibernate postgresql

在我们的数据库中,信用卡号被加密,以便在postgresql数据库中存储加密数据,我们正在按照以下方式进行。

\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读取解密数据?

谢谢!

1 个答案:

答案 0 :(得分: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查询可以相对直接地编写。

需要注意的是,错误日志可能会显示密钥或更糟。您可能希望保留尽可能少的日志并尽可能少地保留它们