0

In our database, credit card number is encrypted, to store encrypted data in postgresql database we are doing following way.

\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; 

Application is using hibernate, how to insert data with encryption and read decrypted data using hibernate?

Thanks!!

4

1 回答 1

0

首先,我认为您的密钥管理还有很多不足之处。您将在密钥管理方面遇到很多问题。请先阅读 Craig 在这个问题上对我的出色回复: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 查询就可以相对简单地编写。

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

于 2013-04-25T08:11:14.040 回答