本發(fā)明涉及網(wǎng)絡(luò)數(shù)據(jù)傳輸技術(shù)領(lǐng)域,特別涉及一種oracle-jdbc數(shù)據(jù)傳輸通道加密壓縮系統(tǒng)及方法。
背景技術(shù):
隨著云計算與云服務(wù)的發(fā)展,很多政府或企業(yè)單位逐漸將應(yīng)用遷移到云服務(wù),有些情況下需要將業(yè)務(wù)系統(tǒng)的應(yīng)用和數(shù)據(jù)庫分別部署到云服務(wù)和本地內(nèi)網(wǎng)。這些系統(tǒng)如果采用jdbc(javadatabaseconnectivity,java數(shù)據(jù)庫連接)連接數(shù)據(jù)方式,考慮到數(shù)據(jù)的安全,需要對應(yīng)用和數(shù)據(jù)庫之間的數(shù)據(jù)傳輸進(jìn)行加密。一般情況下有兩種加密方式:一是采用oracle的內(nèi)置jdbc加密;一種是放棄jdbc方式,通過其他方式(如mq、ftp)進(jìn)行數(shù)據(jù)加密傳輸。
對于第一種加密方式,由于目前政府行業(yè)要求加密算法采用國內(nèi)加密算法,而oracle對此支持不好;第二種加密方式則需要對原來的傳輸方式進(jìn)行改造,修改量會比較大。
由于當(dāng)前采用jdbc連接oracle的應(yīng)用非常廣泛。如大部分java應(yīng)用程序連接oracle,一些數(shù)據(jù)交換工具也連接oracle,還有一些oracle的客戶端查詢工具;當(dāng)以上應(yīng)用場景的數(shù)據(jù)傳輸需要采用國家密碼算法時,就需要開發(fā)一種新的加密方法。
針對jdbc連接oracle數(shù)據(jù)庫的數(shù)據(jù)傳輸種進(jìn)行自定義加密和壓縮的問題,本發(fā)明設(shè)計了一種oracle-jdbc數(shù)據(jù)傳輸通道加密壓縮系統(tǒng)及方法,采用國內(nèi)加密算法對jdbc的底層tcp通道進(jìn)行加密,對原系統(tǒng)的改造量很小。
技術(shù)實現(xiàn)要素:
本發(fā)明為了彌補(bǔ)現(xiàn)有技術(shù)的缺陷,提供了一種簡單高效的oracle-jdbc數(shù)據(jù)傳輸通道加密壓縮系統(tǒng)及方法。
本發(fā)明是通過如下技術(shù)方案實現(xiàn)的:
一種oracle-jdbc數(shù)據(jù)傳輸通道加密壓縮系統(tǒng)及方法,其特征在于:包括客戶代理端和數(shù)據(jù)庫代理端,所述客戶代理端與java程序部署在同一網(wǎng)絡(luò),數(shù)據(jù)庫代理端與oracle數(shù)據(jù)庫部署在同一網(wǎng)絡(luò);所述客戶代理端與java程序之間,數(shù)據(jù)庫代理端與oracle數(shù)據(jù)庫之間以及客戶代理端與數(shù)據(jù)庫代理端之間均通過tcp(transmissioncontrolprotocol,傳輸控制協(xié)議)連接。
所述oracle-jdbc數(shù)據(jù)傳輸通道加密壓縮系統(tǒng)的加密壓縮方法,其特征在于:對jdbc的底層協(xié)議-tcp協(xié)議進(jìn)行處理,對上層協(xié)議即jdbc協(xié)議透明,并在客戶代理端于數(shù)據(jù)庫代理端之間建立起數(shù)據(jù)傳輸加密壓縮通道;所述java程序通過jdbc訪問客戶代理端,所述客戶代理端將請求數(shù)據(jù)傳輸至數(shù)據(jù)庫代理端,通過數(shù)據(jù)庫代理端傳輸至oracle數(shù)據(jù)庫;所述oracle數(shù)據(jù)庫接收到請求后將結(jié)果數(shù)據(jù)發(fā)送至數(shù)據(jù)庫代理端,經(jīng)數(shù)據(jù)庫代理端加密壓縮傳輸?shù)娇蛻舸矶耍蛻舸矶私饷芙鈮汉髠鬏數(shù)絡(luò)ava程序。
所述oracle-jdbc數(shù)據(jù)傳輸通道加密壓縮系統(tǒng)的加密壓縮方法,包括以下步驟:
(1)首先,java程序發(fā)起連接請求后,會同客戶代理端建立一個tcp連接,然后java程序?qū)⒄埱髷?shù)據(jù)發(fā)送給客戶代理端;
(2)客戶代理端讀取數(shù)據(jù)后會向數(shù)據(jù)庫代理端發(fā)起tcp連接請求,之后將請求數(shù)據(jù)發(fā)送發(fā)給數(shù)據(jù)庫代理端;
(3)數(shù)據(jù)庫代理端從客戶代理端讀取請求數(shù)據(jù),并分析出請求數(shù)據(jù)的數(shù)據(jù)庫代理端地址和端口,將請求數(shù)據(jù)的數(shù)據(jù)庫代理端地址和端口替換為實際的oracle數(shù)據(jù)庫地址和端口;
(4)然后,數(shù)據(jù)庫代理端向?qū)嶋H的oracle數(shù)據(jù)庫地址建立tcp連接,替換請求數(shù)據(jù)的oracle數(shù)據(jù)庫地址和端口,將替換后的請求數(shù)據(jù)包發(fā)送給oracle數(shù)據(jù)庫;
(5)oracle數(shù)據(jù)庫接收到請求數(shù)據(jù)后將結(jié)果數(shù)據(jù)發(fā)送至數(shù)據(jù)庫代理端,數(shù)據(jù)庫代理端接收到結(jié)果數(shù)據(jù)后進(jìn)行加密和壓縮;
(6)數(shù)據(jù)庫代理端將加密壓縮包發(fā)送到客戶代理端,客戶代理端按照格式對數(shù)據(jù)庫代理端傳輸過來的加密壓縮包進(jìn)行解密和解壓,解密解壓完畢后將數(shù)據(jù)返回給java程序。
所述步驟(5)中,數(shù)據(jù)庫代理端進(jìn)行加密時在加密包前附加一個表示整個加密包數(shù)據(jù)塊長度的字段data_len;所述步驟(6)中,客戶代理端進(jìn)行解密時首先讀取加密壓縮包的長度字段data_len,如果本次的加密壓縮包未能達(dá)到data_len的長度,則將本次的加密壓縮包放入緩存,繼續(xù)進(jìn)行下一次讀取,直到讀取完整的數(shù)據(jù)量后進(jìn)行解密和解壓;如果本次的加密壓縮包達(dá)到data_len的長度,則將本次的加密壓縮包直接進(jìn)行解密和解壓。
本發(fā)明的有益效果是:該oracle-jdbc數(shù)據(jù)傳輸通道加密壓縮系統(tǒng)及方法,解決了jdbc連接oracle數(shù)據(jù)庫的數(shù)據(jù)傳輸過程中加密和壓縮的問題,實現(xiàn)了采用中國國家密碼算法或其他oracle本身不支持的加密算法時oracle-jdbc的跨網(wǎng)絡(luò)傳輸。
附圖說明
附圖1為本發(fā)明oracle-jdbc數(shù)據(jù)傳輸通道加密壓縮系統(tǒng)及方法示意圖。
具體實施方式
為了使本發(fā)明所要解決的技術(shù)問題、技術(shù)方案及有益效果更加清楚明白,以下結(jié)合附圖和實施例,對本發(fā)明進(jìn)行詳細(xì)的說明。應(yīng)當(dāng)說明的是,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
該oracle-jdbc數(shù)據(jù)傳輸通道加密壓縮系統(tǒng),包括客戶代理端和數(shù)據(jù)庫代理端,所述客戶代理端與java程序部署在同一網(wǎng)絡(luò),數(shù)據(jù)庫代理端與oracle數(shù)據(jù)庫部署在同一網(wǎng)絡(luò);所述客戶代理端與java程序之間,數(shù)據(jù)庫代理端與oracle數(shù)據(jù)庫之間以及客戶代理端與數(shù)據(jù)庫代理端之間均通過tcp(transmissioncontrolprotocol,傳輸控制協(xié)議)連接。
該oracle-jdbc數(shù)據(jù)傳輸通道加密壓縮系統(tǒng)的加密壓縮方法,對jdbc的底層協(xié)議-tcp協(xié)議進(jìn)行處理,對上層協(xié)議即jdbc協(xié)議透明,并在客戶代理端于數(shù)據(jù)庫代理端之間建立起數(shù)據(jù)傳輸加密壓縮通道;所述java程序通過jdbc訪問客戶代理端,所述客戶代理端將請求數(shù)據(jù)傳輸至數(shù)據(jù)庫代理端,通過數(shù)據(jù)庫代理端傳輸至oracle數(shù)據(jù)庫;所述oracle數(shù)據(jù)庫接收到請求后將結(jié)果數(shù)據(jù)發(fā)送至數(shù)據(jù)庫代理端,經(jīng)數(shù)據(jù)庫代理端加密壓縮傳輸?shù)娇蛻舸矶耍蛻舸矶私饷芙鈮汉髠鬏數(shù)絡(luò)ava程序。
java程序需要將jdbc的url改寫為新的模式,現(xiàn)舉例如下:oracle數(shù)據(jù)庫地址:192.168.0.1,端口1521;數(shù)據(jù)庫代理端地址:192.168.1.2,端口6011;客戶代理端地址:192.168.1.1,端口6012。
如按正常的連接方式,java程序訪問oracle數(shù)據(jù)庫的url(uniformresourcelocator,統(tǒng)一資源定位符)為:
“jdbc:oracle:thin:@192.168.0.1:1521:orcl”;
如果使用本發(fā)明需要將url改為:
“jdbc:oracle:thin:@192.168.1.1:6102:orcl//ip=192.168.0.1&port=1521//”;
該oracle-jdbc數(shù)據(jù)傳輸通道加密壓縮系統(tǒng)的加密壓縮方法,包括以下步驟:
(1)首先,java程序發(fā)起連接請求后,會同客戶代理端建立一個tcp連接,然后java程序?qū)⒄埱髷?shù)據(jù)發(fā)送給客戶代理端;
(2)客戶代理端讀取數(shù)據(jù)后會向數(shù)據(jù)庫代理端發(fā)起tcp連接請求,之后將請求數(shù)據(jù)發(fā)送發(fā)給數(shù)據(jù)庫代理端;
(3)數(shù)據(jù)庫代理端從客戶代理端讀取請求數(shù)據(jù),并分析出請求數(shù)據(jù)的數(shù)據(jù)庫代理端地址和端口,將請求數(shù)據(jù)的數(shù)據(jù)庫代理端地址和端口替換為實際的oracle數(shù)據(jù)庫地址和端口;
(4)然后,數(shù)據(jù)庫代理端向?qū)嶋H的oracle數(shù)據(jù)庫地址建立tcp連接,替換請求數(shù)據(jù)的oracle數(shù)據(jù)庫地址和端口,將替換后的請求數(shù)據(jù)包發(fā)送給oracle數(shù)據(jù)庫;
(5)oracle數(shù)據(jù)庫接收到請求數(shù)據(jù)后將結(jié)果數(shù)據(jù)發(fā)送至數(shù)據(jù)庫代理端,數(shù)據(jù)庫代理端接收到結(jié)果數(shù)據(jù)后進(jìn)行加密和壓縮;
(6)數(shù)據(jù)庫代理端將加密壓縮包發(fā)送到客戶代理端,客戶代理端按照格式對數(shù)據(jù)庫代理端傳輸過來的加密壓縮包進(jìn)行解密和解壓,解密解壓完畢后將數(shù)據(jù)返回給java程序。
所述步驟(5)中,數(shù)據(jù)庫代理端進(jìn)行加密時在加密包前附加一個表示整個加密包數(shù)據(jù)塊長度的字段data_len;所述步驟(6)中,客戶代理端進(jìn)行解密時首先讀取加密壓縮包的長度字段data_len,如果本次的加密壓縮包未能達(dá)到data_len的長度,則將本次的加密壓縮包放入緩存,繼續(xù)進(jìn)行下一次讀取,直到讀取完整的數(shù)據(jù)量后進(jìn)行解密和解壓;如果本次的加密壓縮包達(dá)到data_len的長度,則將本次的加密壓縮包直接進(jìn)行解密和解壓。