1. 程式人生 > >Oracle 資料庫中的內容加密與解密 dbms_crypto

Oracle 資料庫中的內容加密與解密 dbms_crypto

Oracle 資料庫中的內容加密與解密

說起來Oracle中有很多涉及加密解密的東西,今天說的這個是dbms_crypto。

有沒有遇到過這樣的應用場景,需要將一些敏感資料欄位脫敏之後傳送給下游。之後下游處理完其他資料之後會攜帶這個脫敏欄位再發回給你,你再用這些敏感資訊還原出原始的值匹配更新原來的資料。最近我就遇到了。

找了一下,Oracle還真有類似的包:dbms_crypto,使用這個包需要管理員登入SYS給你授權才行。

其實脫敏本身很簡單,hash一下等等亂七八糟的輸出一下就可以了,不過脫敏後的資料要想再恢復就要有些技巧了。dbms_crypto包裡介紹了一些可以雙向轉換的演算法,具體可以根據業務需要以及加密安全等級來權衡加解密的方式。

無論什麼演算法加密,基本的東西就是 原文+金鑰+演算法=密文, 密文+金鑰+演算法=原文。加解密都是一個人的話金鑰別弄丟了基本也就安全了。加解密不是同一個人並且懂演算法朋友也許會有不同的選擇。不過這個基本符合我的需求了。

下面是程式碼包:

  1. get_public_key 用來生成加密的32位金鑰
  2. encrypt_data 用來生成加密的密文,需要傳入金鑰以及原文文字
  3. decrypt_data 用來生成解密的原文,需要傳入金鑰以及加密密文
CREATE OR REPLACE PACKAGE pkg_security IS

    FUNCTION get_public_key RETURN RAW;
FUNCTION encrypt_data ( p_public_key RAW,p_original_string VARCHAR2 ) RETURN VARCHAR2; FUNCTION decrypt_data ( p_public_key RAW,p_encrypted_string VARCHAR2 ) RETURN VARCHAR2; END pkg_security; / CREATE OR REPLACE PACKAGE BODY pkg_security IS FUNCTION get_public_key RETURN RAW IS
BEGIN RETURN dbms_crypto.randombytes(32);
END; FUNCTION encrypt_data ( p_public_key RAW,p_original_string VARCHAR2 ) RETURN VARCHAR2 IS encrypted_raw RAW(2000); -- stores encrypted binary text decrypted_raw RAW(2000); -- stores decrypted binary text iv_raw RAW(32); key_bytes_raw RAW(32); encryption_type PLS_INTEGER := -- total encryption type dbms_crypto.encrypt_aes256 + dbms_crypto.chain_cbc + dbms_crypto.pad_pkcs5; BEGIN IF p_public_key IS NULL THEN key_bytes_raw := iv_raw; ELSE key_bytes_raw := p_public_key; END IF; encrypted_raw := dbms_crypto.encrypt( src => utl_i18n.string_to_raw(p_original_string,'AL32UTF8'), typ => encryption_type, key => key_bytes_raw, iv => iv_raw ); RETURN RAWTOHEX(encrypted_raw); END; FUNCTION decrypt_data ( p_public_key RAW,p_encrypted_string VARCHAR2 ) RETURN VARCHAR2 IS encrypted_raw RAW(2000); -- stores encrypted binary text decrypted_raw RAW(2000); -- stores decrypted binary text iv_raw RAW(32); key_bytes_raw RAW(32); encryption_type PLS_INTEGER := -- total encryption type dbms_crypto.encrypt_aes256 + dbms_crypto.chain_cbc + dbms_crypto.pad_pkcs5; BEGIN IF p_public_key IS NULL THEN key_bytes_raw := iv_raw; ELSE key_bytes_raw := p_public_key; END IF; encrypted_raw := HEXTORAW(p_encrypted_string); decrypted_raw := dbms_crypto.decrypt( src => encrypted_raw, typ => encryption_type, key => key_bytes_raw, iv => iv_raw ); RETURN utl_raw.cast_to_varchar2(decrypted_raw); END; END pkg_security; /

相關推薦

Oracle 資料庫內容加密解密 dbms_crypto

Oracle 資料庫中的內容加密與解密 說起來Oracle中有很多涉及加密解密的東西,今天說的這個是dbms_crypto。 有沒有遇到過這樣的應用場景,需要將一些敏感資料欄位脫敏之後傳送給下游。之後下游處理完其他資料之後會攜帶這個脫敏欄位再發回給你,你再用

golangRSA加密解密演算法

package main import ( "crypto/rand" "crypto/rsa" "crypto/x509" "encoding/base64" "encoding/pem" "errors" "fmt" ) // 可通過openssl產生

jasypt加密解密

沒什麼好說的了,直接看demo。 新增依賴 <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt

Oracle資料庫使用者模式的區別聯絡

使用者與模式 使用者(user):Oracle使用者是用連線資料庫和訪問資料庫物件的。(使用者是用來連線資料庫訪問資料庫)。 模式(schema):模式是資料庫物件的集合。模式物件是資料庫資料的邏輯結構。(把資料庫物件用模式分開成不同的邏輯結構)。 使用者(user)與模式(schema)的

記錄《加密解密一道很腦洞的RE題

首先,這道題在《加密與解密》中有完整的分析,那我為什麼要再寫一遍? 因為這題的腦洞你不自己做過是感受不到的。 文章位於《加密與解密》的5.5 KeyFile保護 介面: 首先,上面的那個編輯框不是給你輸入用的,所以考慮是從登錄檔,ini或是其他型別

Java和C#3DES的加密解密

最近在工作中遇到將Java環境的一個使用者ID用表單形式傳遞給.net環境做校驗,考慮到不能將使用者ID作為明文傳遞,因此利用簡單的3DES進行加密解密操作。 需要注意的就是: (1)兩種環境下3DES加密解密的一致性問題:C#會對解密生成的byte在不滿足長度16時,自動

Java常用的加密解密方法

加密,是以某種特殊的演算法改變原有的資訊資料,使得未授權的使用者即使獲得了已加密的資訊,但因不知解密的方法,仍然無法瞭解資訊的內容。大體上分為雙向加密和單向加密,而雙向加密又分為對稱加密和非對稱加密(有些資料將加密直接分為對稱加密和非對稱加密)。 雙向加密大體意思就是明文加

Oracle wrap 和 unwrap( 加密解密

我這裡貼一下unwrap 的程式碼: /* Formatted on2011/8/18 12:59:54 (QP5 v5.163.1008.3004) */ CREATE OR REPLACE PACKAGE amosunwrapper IS    FUNCTION deflate (src IN

Java常用的加密解密方法《轉載》

加密,是以某種特殊的演算法改變原有的資訊資料,使得未授權的使用者即使獲得了已加密的資訊,但因不知解密的方法,仍然無法瞭解資訊的內容。大體上分為雙向加密和單向加密,而雙向加密又分為對稱加密和非對稱加密(有些資料將加密直接分為對稱加密和非對稱加密)。 雙向加密大體意思就是明文加密

MySQL資料庫加密解密

資料加密、解密在安全領域非常重要。對程式設計師而言,在資料庫中以密文方式儲存使用者密碼對入侵者剽竊使用者隱私意義重大。 有多種前端加密演算法可用於資料加密、解密,下面我向您推薦一種簡單的資料庫級別的資料加密、解密解決方案。以MySQL資料庫為例,它內建了相應的加密函式(AES_ENCRYPT() )和解

加密解密

加密與解密安全與服務:數據的加密和解密:OpenSSL(TLS):ssl基本被淘汰,TLS取而代之openssh:dropbear軟件DNS:BIND軟件,功能強大,伯克利的web server:網站服務,最重要的,工作重點 應用程序:httpd(ASF:apach軟件基金會維護)

字符串的加密解密

ffffff end -s initial size sele har tput ear SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF } .L

Java加密解密筆記(二) 對稱加密

解決 理解 span ring println key ted utf-8 rate 前面的僅僅是做了編碼或者摘要,下面看看真正的加密技術。 DES public class DESUtil { static final String ALGORITHM = "

Java加密解密筆記(三) 非對稱加密

arr 內容 phy 資料 密碼 load esp uid user 非對稱的特點是加密和解密時使用的是不同的鑰匙。密鑰分為公鑰和私鑰,用公鑰加密的數據只能用私鑰進行解密,反之亦然。 另外,密鑰還可以用於數字簽名。數字簽名跟上文說的消息摘要是一個道理,通過一定方法對數據內容

Java 課堂作業 加密解密

源代碼 main nextline 流程 選擇 rgs mage put ext 1.設計思路 首先根據提示輸入一段字符串 利用charAt()將字符串的每個字符分解出來,要加密的話轉換成int類型後加3,解密的話轉換成int類型後減3,然後再轉化為char類型 新定義一個

關於字符串加密解密

scanner ascll for str case home class 進行 todo 古羅馬皇帝凱撒在打仗時曾經使用過以下方法加密軍事情報: 請編寫一個程序,使用上述算法加密或解密用戶輸入的英文字串要求設計思想、程序流程圖、源代碼、結果截圖。 【設計思想】

3. 深入研究 UCenter API 之 加密解密(轉載)

method href img 破解 cti subst != efault times 1. 深入研究 UCenter API 之 開篇 (轉載) 2. 深入研究 UCenter API 之 通訊原理(轉載) 3. 深入研究 UCenter API 之

php和java加密解密

padding 而不是 bsp enc openss 解密 div des算法 -c 遇到的java代碼如下: Cipher cipher=Cipher.getInstance("DESede/CBC/PKCS5Padding"); 在php中使用des算法 始終校驗不

安全加密-使用gpg實現加密解密

cal 分享圖片 進行 imp rds 根據 輸出 mon -o 對稱加密算法加密和解密使用同一個密鑰常見的算法:DES,3DES,AES,Blowfish,Twofish,IDEA,RC6,CAST5? 特性:1、加密、解密使用同一個密鑰,效率高2、將原始數據分割成固定大

security 02: 加密解密 、 掃描抓包 、 總結和答疑 、 SELinux安全防護

一段 數字簽名 def 接口 數據流 5.1 調用 message systemctl day01一、selinux安全防護二、數據 加密 解密三、抓包與掃描++++++++++++++++++++++++++++++一、selinux安全防護1.1 selinux 介紹1