更新时间:2026-07-28 GMT+08:00
分享

使用libpq_ce操作内存解密逃生通道

libpq_ce.so为密态特性动态库,包含libpq.so的所有内容和密态客户端解析、加密的相关功能。使用libpq_ce操作内存解密逃生通道,需要设置连接参数enable_ce=3。

#include "libpq-fe.h"
int main()
{
    char *conninfo = "dbname=postgres port=8000 host='localhost' application_name=test user='testuser' password=****** enable_ce=3";
    PGconn *conn = PQconnectdb(conninfo);
    if (PQstatus(conn) != CONNECTION_OK) {
        printf("conn err\n");
        return 0;
    }
    send_clear_token(conn);
    return 0;
}

传输和销毁密钥示例

创建好客户端加密主密钥(CMK)和数据加密密钥(CEK)后,可以通过PQenableTrustedDomain()传输和销毁密钥。

void send_clear_token(PGconn *conn)
{      
    // 传输密钥,将该用户有权限使用的密钥传输到服务端
    if (PQenableTrustedDomain(conn, true)) {
        printf("send ok\n");
    } else {
        printf("%s\n", PQerrorMessage(conn));
        printf("send failed\n");
    }
    // 销毁密钥,清零传输到服务端的密钥
    if (PQenableTrustedDomain(conn, false)) {
        printf("clear ok\n");
    } else {
        printf("%s\n", PQerrorMessage(conn));
        printf("clear failed\n");
    }
    PQfinish(conn);
    return;
}

相关文档