pgcrypto

实用加解密函数

概览

扩展包名版本分类许可证语言
pgcrypto1.3SECPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
7980pgcrypto-
相关扩展pgsodium pgsmcrypto lo anon pg_tde sslutils faker
下游依赖omni_auth omni_aws omni_credentials omni_rest pgcryptokey pgjwt

版本

PG18PG17PG16PG15PG14
1.31.31.31.31.3

安装

提示:这是 PostgreSQL 内核自带的 contrib 扩展

CREATE EXTENSION pgcrypto;

用法

pgcrypto: PostgreSQL 加密函数

pgcrypto 提供加密函数,包括哈希、密码哈希、PGP 加密和原始加密。

CREATE EXTENSION pgcrypto;

通用哈希

SELECT digest('data', 'sha256');                    -- 二进制哈希
SELECT encode(digest('data', 'sha256'), 'hex');     -- 十六进制输出
SELECT hmac('data', 'secret_key', 'sha256');        -- HMAC

支持的算法:md5sha1sha224sha256sha384sha512

密码哈希

-- 设置新密码
UPDATE users SET pswhash = crypt('new password', gen_salt('bf'));

-- 验证密码
SELECT (pswhash = crypt('entered password', pswhash)) AS valid FROM users;

gen_salt() 类型:bf(Blowfish)、md5xdesdessha256cryptsha512crypt

PGP 对称加密

-- 加密
SELECT pgp_sym_encrypt('secret data', 'password');
SELECT pgp_sym_encrypt('secret data', 'password', 'cipher-algo=aes256, compress-algo=1');

-- 解密
SELECT pgp_sym_decrypt(encrypted_data, 'password');

PGP 公钥加密

-- 使用公钥加密
SELECT pgp_pub_encrypt('secret data', dearmor(pubkey));

-- 使用私钥解密
SELECT pgp_pub_decrypt(encrypted_data, dearmor(seckey));
SELECT pgp_pub_decrypt(encrypted_data, dearmor(seckey), 'key_password');

密钥工具

SELECT pgp_key_id(dearmor(key_text));       -- 提取密钥 ID
SELECT armor(binary_data);                   -- ASCII 封装
SELECT dearmor(armored_text);                -- 移除封装
SELECT pgp_armor_headers(armored_text);      -- 提取封装头

原始加密

SELECT encrypt('data'::bytea, 'key'::bytea, 'aes');
SELECT decrypt(encrypted, 'key'::bytea, 'aes');

-- 带 IV
SELECT encrypt_iv('data'::bytea, 'key'::bytea, 'iv'::bytea, 'aes-cbc/pad:pkcs');
SELECT decrypt_iv(encrypted, 'key'::bytea, 'iv'::bytea, 'aes-cbc/pad:pkcs');

算法:bf(Blowfish)、aes。模式:cbc(默认)、cfbecb。填充:pkcs(默认)、none

随机数据

SELECT gen_random_bytes(16);        -- 16个加密随机字节
SELECT gen_random_uuid();           -- 随机 UUID v4

PGP 加密选项

选项默认值
cipher-algobfaes128aes192aes2563descast5aes128
compress-algo0(无)、1(ZIP)、2(ZLIB)0
compress-level0-96
s2k-mode0133

最后修改 2026-03-12: update extension pages (f579993)