You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用gpg命令行解密PostgreSQL中pgp_pub_encrypt加密的数据?

解决PostgreSQL加密数据导出后用gpg命令行解密的问题

核心原因

pgp_pub_encrypt生成的是原始OpenPGP加密二进制数据,直接导出时若因编码、额外格式修改(比如手动加gpg头)会破坏数据结构,导致gpg无法识别。gpg默认兼容两种格式:带ASCII Armor头的文本格式,或未被篡改的原始二进制格式。

方法一:导出时转为ASCII Armor格式(推荐)

在PostgreSQL查询阶段直接将加密数据转为Armor格式,导出后gpg可直接识别:

-- 加密时直接生成Armor格式数据
SELECT pgp_armor(pgp_pub_encrypt('目标文本', dearmor('你的公钥内容'))) AS encrypted_armor;

-- 对已存在的二进制加密数据转Armor
SELECT pgp_armor(encrypted_column) FROM your_table WHERE id = 目标ID;

将查询结果导出为文本文件(比如encrypted.txt),执行解密命令:

gpg --decrypt encrypted.txt

方法二:直接处理原始二进制导出数据

若已导出二进制文件,需确保导出过程未损坏数据,再用gpg解密:

  1. 用psql的二进制模式导出数据,避免编码转换:
psql -d 你的数据库名 -c "\copy (SELECT encrypted_column FROM your_table WHERE id = 目标ID) TO 'encrypted.bin' WITH BINARY"
  1. 直接解密二进制文件:
gpg --decrypt encrypted.bin

注意:不要手动给二进制文件添加gpg头,这会破坏原始OpenPGP结构,导致gpg解析失败。

常见排查点

  • 确认私钥已导入gpg密钥环:执行gpg --list-secret-keys查看是否存在对应私钥
  • 导出二进制时禁止用文本编辑器打开保存,避免字节篡改
  • 若提示“no valid OpenPGP data found”,优先尝试Armor格式导出方案

内容的提问来源于stack exchange,提问作者Jon Buys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:34:51