PostgreSQL【應用 04】加解密擴展 pgcrypto 使用實例(加密、導出、導入、解密流程說明)

加解密擴展 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;” 我想今天把這些 “理論骨架” 填上 “實踐血肉”—— 畢竟我當年踩過的坑、摸過…