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