摘要:XML作為電子病歷的一種通用格式,為保證數(shù)據(jù)共享的安全性需對其進行加密。本文介紹了XML加密技術(shù)特點,通過實例說明在Java SE6開發(fā)環(huán)境中如何使用DOM4J和對稱算法實現(xiàn)電子病歷的加密處理。
關(guān)鍵詞:XML;電子病歷;加密
1引言
電子病歷是醫(yī)院信息系統(tǒng)服務(wù)的核心,電子病歷數(shù)據(jù)收集貫穿于患者在醫(yī)院就診的整個過程,它包含了患者基本信息、既往史、現(xiàn)病史、檢驗結(jié)果、診斷信息等,這些醫(yī)療數(shù)據(jù)即有結(jié)構(gòu)化的信息也有大量的非結(jié)構(gòu)化的信息,還包括大量不確定信息,對擴展性要求很高。XML由于其異構(gòu)性、可擴展性、靈活性、自描述性及結(jié)構(gòu)上的完整性等特點,使得XML成為描述電子病歷的一種極好的結(jié)構(gòu)化形式。醫(yī)院和醫(yī)院之間、社區(qū)醫(yī)療站和醫(yī)院、醫(yī)院和醫(yī)保中心都需要通過網(wǎng)絡(luò)來獲取相關(guān)的醫(yī)療信息,由于XML標準中立性,也使得XML成為數(shù)據(jù)交換和共享的一種標準通用格式。針對目前網(wǎng)絡(luò)上的各種安全問題,就必須采用XML安全技術(shù)來實現(xiàn)數(shù)據(jù)安全有效的傳輸。
2 Xml加密規(guī)范
XML加密技術(shù)的基礎(chǔ)是XML加密規(guī)范,該規(guī)范的目標是用XML描述一個經(jīng)過數(shù)字加密的web資源,也可以是XML文件本身。XML加密與傳統(tǒng)加密最大的區(qū)別是引入了加密粒度的概念,傳統(tǒng)加密技術(shù)是對整個文件進行整體加密,而XML加密可以根據(jù)需要,可以對整個XML文件加密,也可以對XML文件中的元素以及元素中的內(nèi)容進行加密,而其他不重要的部分則不加密,這樣既保護了數(shù)據(jù)的安全,又加快了加密的速度,從而提高了數(shù)據(jù)交換系統(tǒng)的效率。
在W3C的推薦規(guī)范中,XML數(shù)據(jù)加密后仍是XML文檔格式,使用EncryptedData元素作為XML加密文檔的主要語法元素,其余元素均是其子元素。EncryptedData元素的語法結(jié)構(gòu)為:
?
其中
3 XML 加密技術(shù)實現(xiàn)
XML加密算法主要有對稱加密和非對稱加密算法兩大類。對稱加密算法簡單快捷,密鑰較短,破譯困難,加密速度快,加密效率高,適合元素大批量加密,如DES、3DES、AES等,由于對稱加密算法加密和解密使用相同的密鑰,密鑰交換的安全至關(guān)重要。非對稱加密算法計算量比對稱加密算法要大,運行時間長,常用來加密小的數(shù)據(jù)量,如DSA、RSA等。
JAVA SE6開發(fā)環(huán)境中,利用DOM4J提供的豐富XML API,非常容易實現(xiàn)對XML文件進行各種操作。JCE(Java加密擴展)是集成在JDK1.6中的一個安全組件,提供了加密服務(wù)類和相關(guān)的接口,支持基本加密算法。若對XML文件中某一元素加密處理,可通過如下步驟完成:① DOM4J根據(jù)元素名稱獲取需要加密的元素;②JCE加密算法對其進行加密處理;③將加密內(nèi)容和加密相關(guān)信息構(gòu)造出
清單1加密前的電子病歷XML
反復(fù)咳嗽、咳痰、活動后氣促10年,間斷性雙下肢水腫1年,再發(fā)2d。
清單2 加密后的電子病歷XML
反復(fù)咳嗽、咳痰、活動后氣促10年,間斷性雙下肢水腫1年,再發(fā)2d。
用Java實現(xiàn)加密的核心代碼如下:
KeyGenerator KG = KeyGenerator.getInstance(\"DESede\");
KeytheKey = KG.generateKey(); // 生加密密鑰theKey;
String clearData = new String(data); // data為需加密的內(nèi)容,即< diagnosis >元素
int pad = clearData.getBytes().length %8;
for(int i=0;i<(8-pad);i++)
clearData += \" \";//用空格補足字符串, 長度為8的倍數(shù)
Cipher cipherObj = Cipher.getInstance(\"DESede/CBC/NoPadding\");//創(chuàng)建加密對象
cipherObj.init(Cipher.ENCRYPT_MODE,this.encKey); //初始化加密對象
byte[] cipherTemp = cipherObj.doFinal(clearData.getBytes());//加密數(shù)據(jù)
String cipherDataBase64 = getBase64Encoded(cipherTemp);//轉(zhuǎn)化成Base64編碼
利用DOM4JAPI方法構(gòu)造
4結(jié)論
本文介紹了使用對稱算法實現(xiàn)對電子病歷XML加密,保證加密數(shù)據(jù)安全的核心是密鑰交換的安全性。一種可行的方法是使用非對稱加密算法加密對稱加密算法的密鑰,以保證密鑰交換的安全,再使用對稱加密算法進行文件數(shù)據(jù)的加密和解密,這樣的結(jié)合加密方式會在實際開發(fā)中得到廣泛應(yīng)用。
參考文獻:
[1]陳可.基于 XML的電子病歷系統(tǒng)[J].計算機系統(tǒng)應(yīng)用.2012,21(6).
[2]車葵,牛曉太,邢書濤. XML加密方法的研究與實現(xiàn)[J].計算機工程和設(shè)計.2008,29(20).
[3]陳晚華.XML安全技術(shù)在共享數(shù)據(jù)交換中的應(yīng)用[D].中南大學,2008.編輯/孫杰