加解密扩展 pgcrypto 使用实例

  • 1.需求说明
  • 2.工具说明
    • 2.1 环境说明
    • 2.2 插件添加
  • 3.实例分析
    • 3.1 测试数据
    • 3.2 进行加密
    • 3.3 数据导出
      • 3.3.1 Navicat 导出
      • 3.3.2 copy 命令导出
    • 3.4 数据解密
      • 3.4.1 Navicat 导入
      • 3.4.2 copy 导入
    • 3.5 坑

1.需求说明

从内网导出敏感数据的时候,对数据进行加密是基本操作。就这么一个简单的加密函数我也遇到了一个坑。

2.工具说明

pgcrypto 是 PostgreSQL 的一个扩展模块,为数据库添加对数据进行加密/解密、哈希计算和随机数生成的支持,允许直接在 SQL 层面操作敏感信息(如密码存储、安全令牌生成等)。

2.1 环境说明

SELECT VERSION( )
-- 数据库版本信息
PostgreSQL 12.12 (Debian 12.12-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit

pgcrypto 版本查询:

-- 查询可使用的插件
SELECT * FROM pg_available_extensions;pgcrypto	1.3		cryptographic functions

2.2 插件添加

-- 插件添加
CREATE extension pgcrypto;

插件是数据库级别的,需要在使用的数据库进行添加。使用 AES(高级加密标准)、DESBlowfish 等算法加密/解密文本或二进制数据。

  • 示例函数:pgp_sym_encrypt(data, key), pgp_sym_decrypt(ciphertext, key)

注意:密钥需妥善管理,丢失则无法解密!

3.实例分析

3.1 测试数据

SELECT * FROM test_export;
nameagephoneaddress
TOM41230666TOMHOME

3.2 进行加密

SELECT name, age, pgp_sym_encrypt ( phone, 'cryptogram' ) AS phone, address
FROMtest_export;
nameagephoneaddress
TOM4(BLOB) 73 bytesTOMHOME

这里仅对 phone 进行了加密,加密后是 blob 类型的数据。

3.3 数据导出

3.3.1 Navicat 导出

"name"	"age"	"phone"	"address"
"TOM"	"4"	"ww0EBwMC/PMcgtRyDvtq0jgBRaXN2VwZV0+Ho3TEEQbJTn1R8Q7zBA/gwnA09FUgmpkCxzeUjMshDTDs7e/UEYLkyMjqRQFOrA=="	"TOMHOME"

3.3.2 copy 命令导出

大数据导出时还是使用数据库的 copy 命令比较稳定高效:

-- 数据导出
COPY ( SELECT NAME, age, pgp_sym_encrypt ( phone, 'cryptogram' ) AS phone, address FROM test_export ) TO '/var/lib/postgresql/data/20250828.txt';
TOM	4	\\xc30d04070302fc5b66be55ee75067ad2380151399eaf4174798b5a461113554ec1d5bc998167b5b118e69c979bc117ef53bc7e7b7dd1baddccaa3c09efe0d3c80014ddfe5801e8eefe	TOMHOME

是不是发现了数据格式的不同。

3.4 数据解密

加密数据导入表的 phone 字段的类型是 bytea 的,需要注意:

CREATE TABLE "public"."test_import" ("name" varchar(255) COLLATE "pg_catalog"."default","age" int4,"phone" bytea,"address" varchar(255) COLLATE "pg_catalog"."default"
);

分别将 Navicat 和 copy 导出的数据导入到数据库,然后进行解密。

3.4.1 Navicat 导入

将 Navicat 导出的数据再使用 Navicat 导入到 test_import 表里:

数据解密:

SELECTname, age, pgp_sym_decrypt ( phone, 'cryptogram' ) AS phone, address
FROMtest_import;

解密结果:

3.4.2 copy 导入

COPY test_import ( name, age, phone, address ) FROM '/var/lib/postgresql/data/20250828.txt';

解密操作和结果都是一致的。

3.5 坑

将 copy 导出的数据用 Navicat 导入:

大家应该已经料到了吧,Navicat 和 copy 导出的数据格式本身就不一样,看一下解密情况:

毫无疑问,无法解密。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94828.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94828.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94828.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SDK、JDK、JRE、JVM的区别

SDK、JDK、JRE、JVM的区别一、SDK二、JDK三、JRE四、JVM五、JDK、JRE、JVM三者关系图一、SDK SDK(Software Development Kit,程序软件开发工具包),可以认为jdk只是sdk的一种(子集),而当提及jav…

如何启动一个分支网络改造试点?三步走

在多云化、全球化的今天,企业的分支网络早已不仅仅是“能连”的问题。视频会议卡顿、ERP 响应延迟、跨境访问不稳、合规风险增大……这些都让 CIO 和 IT 负责人越来越清楚:分支网络改造是数字化的必修课。但是,面对几百甚至上千个分支机构&am…

四,设计模式-原型模式

目的原型模式的产生是为了解决一个问题,即复制对象时对被复制对象所属类的依赖。当需要复制一个对象时,需要遍历对象中的所有成员并进行复制,但存在一些问题:某些成员对象可能是私有的无法访问。同时要复制某个对象,那…

(笔记)Android窗口管理系统分析

概述 Android窗口管理系统是Android UI框架的核心组件,负责管理所有应用窗口的显示、布局、层级、焦点和输入事件分发。WindowManagerService(WMS)作为系统服务,协调Surface、Activity、View等组件,为用户提供流畅的界…

WebIDEPLOY 技术支撑草莓数字产业链的构建逻辑与实践路径—— 草莓智能育苗系统实践应用分析

一、WebIDEPLOY 技术与草莓产业数字化的适配逻辑WebIDEPLOY 技术以 “低门槛接入、全链路协同、数据驱动” 为核心特征,其底层架构可精准对接草莓产业链的碎片化需求。通过零代码设备接入模块,能快速整合育苗棚传感器、种植区智能设备、销售端数据平台等…

汽车电气系统的发展演进为测试带来了哪些影响?

随着汽车智能化进程加速,车辆电气系统方案持续演进。为满足日益严格的功能安全要求,主机厂逐渐引入智能配电、冗余配电等新型方案,这给电气系统的测试环节带来了显著影响。智能配电测试何为智能配电?下图分别展示了传统电气架构以…

Rocky9配置完VMware桥接模式后没有自动获取IP

现象如下:查看网卡状态: nmcli dev status可以看到ens160存在,但是disconnected查看已有连接配置: nmcli con show可以看到连接配置也在重启NetworkManager systemctl restart NetworkManager激活网卡 sudo nmcli con up "en…

Unity List 相关

顺序复制同类型的List①list2 new List<T>(list1);②list2.Clear(); list1.ForEach(item > list2.Add(item));倒序复制同类型的Listlist2 new List<T>(list1);//顺序复制 list2.Reverse();//颠倒list乱序复制同类型的ListList<T> list2 new List<T&…

网络安全测试(一)Kali Linux

Kali Linux 是一款专为网络安全测试、渗透测试和白帽黑客设计的 Linux 发行版&#xff0c;预装了大量安全测试工具。以下是其核心工具的分类及代表性工具介绍&#xff1a; 一、信息收集工具 用于获取目标网络、主机或系统的基础信息。 Nmap&#xff1a;网络扫描工具&#xff0…

go grpc使用场景和使用示例

Go gRPC 使用场景 微服务架构中的服务间通信&#xff1a;在微服务架构中&#xff0c;不同的服务之间需要高效、可靠地进行通信和数据交换&#xff0c;gRPC 可以很好地满足这一需求。需要高并发、低延迟通信的场景&#xff1a;gRPC 基于 HTTP/2 协议&#xff0c;支持多路复用和头…

6.8 学习ui组件方法和Element Plus介绍

学习 UI 组件库的核心是 “文档 实践 深入”。从官方文档入门&#xff0c;通过构建真实项目来巩固和深化理解&#xff0c;适时探索源码以提升认知。同时&#xff0c;掌握按需引入、主题定制、插槽等关键技术&#xff0c;并保持对性能、可访问性和最佳实践的关注。记住&#x…

MongoDB和Mysql比较

MongoDB与MySQL深度对比:选择适合你的业务的数据存储方案 在当今数据驱动的时代,选择合适的数据库系统对应用性能、开发效率和业务扩展性至关重要。作为数据库领域的两大巨头,关系型数据库的代表MySQL和文档型NoSQL的代表MongoDB,常常成为开发者面临的选择。本文将从数据模…

LoRA modules_to_save解析及卸载适配器(62)

LoRA modules_to_save解析及卸载适配器 modules_to_save解析 PEFT 模型中卸载适配器 在需保存模块列表中,还可以添加什么 modules_to_save解析 还有一个配置参数可用于指定你希望保持 “活跃且可训练” 的层列表 —— 也就是说,这些层会被设为可训练状态。更便捷的是,你无需…

分支多、云也多,网络又慢又烧钱?一套方案全搞定!

随着企业云化和全球化步伐加快&#xff0c;多云、混合云已成为常态&#xff0c;而非选择。随之而来的是网络架构的复杂性与日俱增&#xff1a;分支越来越多&#xff0c;应用越来越散&#xff0c;链路越来越杂。IT部门不仅要保障关键应用的体验&#xff0c;还要应对跨境合规、成…

centos7安装java mysql redis nginx

1.安装java8(百度) yum install java-1.8.0-openjdk.x86_64 [rootcanteen jar]# yum install java-1.8.0-openjdk.x86_64 yum install java-1.8.0-openjdk-devel.x86_64 查java版本&#xff1a; [rootlocalhost ~]# java -version openjdk version "1.8.0_372" Op…

【STM32】G030单片机的窗口看门狗

一、简单介绍窗口看门狗适合需要精确时序控制的场合&#xff0c;在一个受限的窗口期内喂狗&#xff0c;如果递减计数器还没有到窗口值就喂狗&#xff0c;会触发复位如果一直不喂狗&#xff0c;也会触发复位&#xff0c;和之前的独立看门狗的窗口选项有点类似需要指出的是&#…

完整代码注释:实现 Qt 的 TCP 客户端,实现和服务器通信

一、实验效果演示 实现 Qt 的 TCP 客户端&#xff0c;实现和服务器通信二、代码框架 三、代码 tcpclient客户端代码 tcpclient.cpp #include "tcpclient.h" #include "ui_tcpclient.h" #include <QDebug> #include <QMessageBox> #include …

AR培训系统:油气行业的安全与效率革新

在油气行业&#xff0c;一场由增强现实&#xff08;AR www.teamhelper.cn &#xff09;技术引领的培训革命正在悄然发生。新员工们不再需要冒着生命危险在真实的钻井平台上学习操作&#xff0c;而是通过AR眼镜在虚拟环境中模拟钻井、起下钻甚至处理井喷等复杂操作。这种创新的培…

Linux 多线程:互斥与同步

Linux 多线程中的互斥与同步 —— pthread_mutex 与 semaphore在 Linux 多线程编程中&#xff0c;线程间共享全局变量或数据结构是常见场景。如果多个线程同时读写同一块内存&#xff0c;就可能产生 数据竞争 和 不一致。为了解决这些问题&#xff0c;Linux 提供了多种 线程同步…

技术演进中的开发沉思-81 Linux系列:进程地址空间

上一个篇幅和大家聊了进程地址空间、内存描述符这些 Linux 内存管理的 “基本功”&#xff0c;我的一些学生问&#xff1a;“这些概念听起来简单&#xff0c;可实际开发中怎么用得上&#xff1f;” 我想今天把这些 “理论骨架” 填上 “实践血肉”—— 毕竟我当年踩过的坑、摸过…