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