概要
对数据库中的密码,个人信息之类进行加密,通常有两种方法
- 应用端加密
- 数据库端加密
1. 安装pgcrypto
用超级管理员账户执行以下命令,就可以安装使用pgcrypto中的各种加密,解密函数。前提是postgreSQL 9.1之后的版本。
postgres=# CREATE EXTENSION pgcrypto;
使用\dx确认安装结果。

2. 尝试加密函数
pgcrypto支持三种加密方式。但是由于前两者并不具备PGP加密函数的先进功能,这里只介绍跟尝试使用PGP加密。
- 普通哈希函数
- 口令哈希函数
- PGP 加密函数
2.1 PGP加密函数
语法
pgp_sym_encrypt(data text, psw text [, options text ]) returns bytea
pgp_sym_encrypt_bytea(data bytea, psw text [, options text ]) returns bytea
加密例子
密钥可以自由指定字符串文字,这里用的是pass。注意,解密时也必须指定相同的密钥。
select pgp_sym_encrypt('mypassword','pass') as result;
加密结果
result
C30D0407030242EC55BE12331B136DD23B013E7F43CB5FA0C1DCA5DFA43ABB51F80128FD536B03C9CF6C5D7193C2F72B9D379E4EDB92155D129564596BE39B5059695D00B6B4F1D873CF41DB
3.1 PGP解密函数
语法
pgp_sym_decrypt(msg bytea, psw text [, options text ]) 返回 text
pgp_sym_decrypt_bytea(msg bytea, psw text [, options text ]) returns bytea
解密例子
解密时也必须指定加密的密钥。
select pgp_sym_decrypt(pgp_sym_encrypt('mypassword','pass'), 'pass') as result;
解密结果
result
mypassword
如果使用错误的密钥,当然会解密失败。
select pgp_sym_decrypt(pgp_sym_encrypt('mypassword','pass'), 'wrongpass') as result;

总结
使用pgcrypto的PGP函数可以轻松的进行数据加密,解密。不过即使加密了数据库中的数据,解密后在网络传输中也时毫无保护的,还需要跟SSL等配合使用。