1. PostgreSQL pgcrypto 扩展的应用?
请说明 PostgreSQL pgcrypto 扩展的应用场景与用法?
- pgcrypto 提供的加密函数
- 数据加密与哈希
- 与字段级加密的关系
pgcrypto 是 PostgreSQL 的密码学扩展,提供哈希(digest、hmac)、加解密(encrypt/decrypt)、随机数(gen_random_bytes)和密码哈希(crypt)等函数。它常用于对敏感字段(如身份证号、手机号)做应用侧加密,例如用 sym_encrypt/decrypt 以 AES 对称加密存储,或用 pgp_sym_encrypt 做 PGP 兼容加密;也可用 crypt 对密码做带盐的哈希存储。pgcrypto 让加密逻辑可以内嵌在 SQL 中,但密钥通常由应用持有、通过参数传入,避免硬编码在数据库。其灵活性使其成为 PostgreSQL 字段级加密的常用工具,但也要注意加密列无法走索引与范围查询的局限。
pgcrypto 提供的是"加密能力工具箱",让开发者能在 SQL 层直接完成加解密。它适合应用侧显式加密,密钥管理仍需自行负责,与透明加密(TDE)的应用透明性不同。
CREATE EXTENSION IF NOT EXISTS pgcrypto;
-- 对称加密
SELECT encrypt('sensitive', 'aes_key_16byte', 'aes');
SELECT decrypt(encrypt('sensitive', 'aes_key_16byte', 'aes'), 'aes_key_16byte', 'aes');
-- 密码哈希
SELECT crypt('mypassword', gen_salt('bf'));