在我们的数据库中,信用卡号被加密,以便在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读取解密数据?
谢谢!
答案 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查询可以相对直接地编写。
需要注意的是,错误日志可能会显示密钥或更糟。您可能希望保留尽可能少的日志并尽可能少地保留它们