999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于XML數(shù)字簽名的研究及實(shí)現(xiàn)

2009-12-31 00:00:00邢海花吳淑雷
商場現(xiàn)代化 2009年8期

[摘 要] 本文主要研究如何充分利用XML的結(jié)構(gòu)化優(yōu)勢,結(jié)合傳統(tǒng)數(shù)字簽名技術(shù),實(shí)現(xiàn)粒度可選的數(shù)字簽名。首先深入研究了XML數(shù)字簽名的規(guī)范,XML數(shù)字簽名的生成原理及驗(yàn)證方法。并利用跨平臺的Java語言對基于WEB的XML電子定單實(shí)現(xiàn)粒度可選的數(shù)字簽名,解析了基于Java的XML數(shù)字簽名的通用實(shí)例,使其能夠很方便的融入實(shí)際應(yīng)用之中。

[關(guān)鍵詞] XML 數(shù)字簽名 RSA JAVA

一、引言

XML(eXtensible Markup Language,可擴(kuò)展標(biāo)記語言)是由W3C于1998年2月發(fā)布的一種標(biāo)準(zhǔn),是SGML(Standard Generalized Markup Language,標(biāo)準(zhǔn)通用標(biāo)記語言)的一個簡化子集。XML作為一種描述數(shù)據(jù)的標(biāo)記語言,以其強(qiáng)大的描述功能、可擴(kuò)展性、結(jié)構(gòu)化語義,以及平臺無關(guān)性等特點(diǎn),在互聯(lián)網(wǎng)和分布式異構(gòu)環(huán)境中成為主要的數(shù)據(jù)傳輸和交換載體,在電子商務(wù)等領(lǐng)域得到了廣泛的應(yīng)用。為了確保XML數(shù)據(jù)的安全性,尤其是數(shù)據(jù)的完整性、可驗(yàn)證性和不可抵賴性,XML數(shù)字簽名技術(shù)應(yīng)運(yùn)而生。

XML數(shù)字簽名與傳統(tǒng)的數(shù)字簽名技術(shù)相比,并沒有技術(shù)上的飛躍或本質(zhì)上的不同。XML數(shù)字簽名技術(shù)同樣基于目前廣泛使用的公共密鑰體系(Public Key Infrastructure,PKI),用戶基于某種非對稱加密算法,例如:RSA、DSA,用私鑰對要簽署的數(shù)據(jù)簽名,然后接受方用簽名者的公鑰對簽名進(jìn)行校驗(yàn)。但不同的是,傳統(tǒng)的數(shù)字簽名技術(shù)一般采用整體式簽名,或基于OLE的對象鏈接嵌入式簽名。傳統(tǒng)的數(shù)字簽名技術(shù)很難支持電子文檔的多人批復(fù)簽名,也不支持對電子文檔的部分簽名。XML數(shù)字簽名較好地解決了上述問題。XML數(shù)字簽名充分利用了XML語言本身強(qiáng)大的表達(dá)能力和擴(kuò)展能力,不僅可以像傳統(tǒng)的數(shù)字簽名技術(shù)一樣對整個文檔簽名,還可以實(shí)現(xiàn)在較細(xì)的粒度上對文檔的特定部分進(jìn)行簽名,且支持多重簽名。

二、XML數(shù)字簽名規(guī)范

由IETF(Internet Engineering Task Force)和W3C共同組建的XML Signature工作組在2001年8月20日公布了XML數(shù)字簽名的推薦版本。W3C將XML數(shù)字簽名解釋為:定義一種與XML語法兼容的數(shù)字簽名語法描述規(guī)范,描述數(shù)字簽名本身和簽名的生成與驗(yàn)證過程。作為一個安全有效的數(shù)字簽名方案,該規(guī)范提供了數(shù)字簽名的完整性(Integrity)、簽名確認(rèn)(Authentication)和不可抵賴性(None repudiation)。其規(guī)范框架及產(chǎn)生流程如圖1所示:

根據(jù)簽名元素和被簽名對象之間的關(guān)系,XML數(shù)字簽名有三種簽名方式:

1.封裝式簽名(Enveloping Signature),被簽名數(shù)據(jù)被封裝在XML簽名元素的內(nèi)部,元素類似于一個信封,將簽名的數(shù)據(jù)封在里面。

2.嵌入式簽名(Enveloped Signature),元素本身被嵌入到被簽名數(shù)據(jù)中,與封裝式相反,被簽名的數(shù)據(jù)充當(dāng)了包含簽名的“信封”。

3.分離式簽名(Detached Signature),元素和被簽名數(shù)據(jù)是彼此分離的,兩者之間不存在包含和被包含的關(guān)系。被簽名的數(shù)據(jù)可以是獨(dú)立的外部文檔,也可以是跟Signature元素位于同一XML文檔內(nèi)的并列的兄弟元素。

三、XML數(shù)字簽名的實(shí)現(xiàn)

1.XML數(shù)字簽名生成。自從XML數(shù)字簽名規(guī)范發(fā)布以來,很多組織機(jī)構(gòu)進(jìn)行了研究并提供了具體的實(shí)現(xiàn)。例如,IBM的AlphaWorks小組開發(fā)了XML安全套件(XML Security Suite),除了提供XML數(shù)字簽名的實(shí)現(xiàn)外,還包括了XML的訪問控制、XML加密等功能。NEC專門提供了XML-Signature Software Library對XML數(shù)字簽名進(jìn)行支持。但是XML安全或數(shù)字簽名套件,很難滿足在各種應(yīng)用程序中對各種各樣實(shí)際的XML文檔進(jìn)行靈活的簽名應(yīng)用。本文將XML數(shù)字簽名與跨平臺的Java語言相結(jié)合,對XML電子訂單文檔實(shí)現(xiàn)粒度可選的數(shù)字簽名。實(shí)現(xiàn)步驟如下:

(1)生成密鑰對。對于一個用戶來說,如果要進(jìn)行數(shù)字簽名,那么他必須有一對屬于自己的密鑰對(私鑰和公鑰)。在實(shí)際應(yīng)用系統(tǒng)中,密鑰對通常是由CA預(yù)先生成的并存儲在服務(wù)器密鑰庫中,私鑰自己保存和公鑰公開。我們利用Java中提供的工廠類KeyPairGenerator,通過其中的genKeyPair()方法生成密鑰對。

KeyPairGenerator KPG=KeyPairGenerator.getInstance(\"RSA\"); //---創(chuàng)建密鑰對生成器---

KPG.initialize(1024);//---初始化密鑰生成器---

KeyPair KP=KPG.genKeyPair();//---生成密鑰對---

(2)加載解析XML文檔轉(zhuǎn)換為DOM對象。用DOM解析XML文檔操作比較簡便,先將XML文檔讀入內(nèi)存,在內(nèi)存中建立起一棵DOM文檔樹,然后通過對內(nèi)存中DOM文檔樹的操作來完成對XML文檔的操作。加載解析XML文檔并取得根元素的代碼如下:

DocumentBuilderFactory userDBF=DocumentBuilderFactory.newInstance();//---建立一個解析器工廠---

DocumentBuilder userDB=userDBF.newDocumentBuilder(); //---獲得一個DocumentBuilder對象,這個對象代表了具體的DOM解析器

Document doc=userDB.parse(new File(\"invoice.xml\")); //---得到代表invoice.xml文件的文檔對象

Element elementRoot=doc.getDocumentElement(); //---得到根元素---

然后通過Node結(jié)點(diǎn)對象的getChildNodes()方法獲取DOM樹中所需要的子節(jié)點(diǎn)。后面我們創(chuàng)建Reference元素對象、SignedInfo元素對象、KeyInfo元素對象、XMLSignature元素對象都要用到加載的DOM文檔樹。

(3)對XML文檔中的節(jié)點(diǎn)進(jìn)行可選性簽名。對要簽名的文檔(或節(jié)點(diǎn))用指定的算法進(jìn)行轉(zhuǎn)換。如下轉(zhuǎn)換獲得需要簽名的節(jié)點(diǎn):

descendant-or-self::creditcard

根據(jù)指定的算法對轉(zhuǎn)換后的結(jié)果進(jìn)行摘要計(jì)算,結(jié)果存入。JAVA中提供了比較成熟的計(jì)算摘要的算法,MessageDigest是工廠類,用靜態(tài)方法getInstance()來生成對象,傳入?yún)?shù)是String類型,用于指出計(jì)算摘要使用的算法。摘要計(jì)算的核心代碼如下:

try{ MessageDigest MD=MessageDigest.getInstance(\"MD5\");

MD.update(str.getBytes(\"UTF8\"));

byte[] strMD5Byte=MD.digest();

return strMD5Byte;

}catch(Exception e){e.printStackTrace();}

III.收集各個參考對象元素,該元素包括:,建立

IV.建立元素并進(jìn)行規(guī)范化處理后簽名。讀取私鑰并簽名的關(guān)鍵代碼:

FileInputStream FIS=new FileInputStream(\"RSAPriKey.dat\"); //---讀取私鑰---

Signature signature=Signature.getInstance(\"MD5WithRSA\"); //---獲取Signature對象---

signature.initSign(RSAPK); //---初始化Signature對象---

signature.update(mydata.getBytes(\"UTF8\")); //---傳入要簽名的數(shù)據(jù)---

byte[] signeddata=signature.sign();//---用私鑰作簽名---

(4)按照中指定的算法對元素進(jìn)行簽名操作,將簽名結(jié)果存入節(jié)點(diǎn)。建立元素,該元素包括。最后,將各個元素添加入XML文檔,生成XML簽名文檔。運(yùn)用JAVA語言對下圖中的XML電子訂單文檔實(shí)現(xiàn)了XML文檔節(jié)點(diǎn)可選性的數(shù)字簽名,結(jié)合上述簽名過程解析,對結(jié)點(diǎn)進(jìn)行簽名的實(shí)現(xiàn)結(jié)果如下圖所示:

2.XML數(shù)字簽名驗(yàn)證。XML數(shù)字簽名的校驗(yàn)過程分為兩部分進(jìn)行,參考校驗(yàn)(Reference Validation)和簽名校驗(yàn)(Signature Validation)。參考校驗(yàn)的目的是確保被簽署對象沒有被做任何的修改,驗(yàn)證在每個元素的元素中進(jìn)行;而簽名校驗(yàn)的目的則是保證簽署人身份的真實(shí)性,驗(yàn)證利用元素計(jì)算得來的簽名。

(1)對簽名校驗(yàn)(參考校驗(yàn))。對簽名校驗(yàn)通過計(jì)算元素中的每一個元素,與元素中已包含的摘要值進(jìn)行比較。

(2)對簽名校驗(yàn)(簽名校驗(yàn))。對的簽名校驗(yàn),用指定的算法重新計(jì)算元素的簽名值,將生成的值和中已有的簽名值進(jìn)行比較。

當(dāng)上述兩步都成功時,該XML數(shù)字簽名的校驗(yàn)才算通過。

四、結(jié)束語

隨著XML的廣泛應(yīng)用,XML數(shù)據(jù)的安全問題已成為關(guān)注的焦點(diǎn)。本文主要對XML數(shù)字簽名規(guī)范,XML數(shù)字簽名的生成與驗(yàn)證過程進(jìn)行了系統(tǒng)的研究。并結(jié)合XML文檔的結(jié)構(gòu)優(yōu)勢和RSA算法的安全性,利用跨平臺的Java語言對XML文檔實(shí)現(xiàn)粒度可選的數(shù)字簽名,并詳細(xì)解析了實(shí)現(xiàn)過程及關(guān)鍵代碼,使其能夠很方便的融入實(shí)際應(yīng)用之中。在文檔部分簽名的實(shí)際應(yīng)用當(dāng)中具有一定的借鑒意義。

參考文獻(xiàn):

[1]丁躍潮 張 濤:XML實(shí)用教程[M].北京:北京大學(xué)出版社,2006

[2]韋琳娜 張連寬等:XML數(shù)字簽名和傳統(tǒng)數(shù)字簽名的對比研究[J].信息技術(shù)與標(biāo)準(zhǔn)化,2004,10

[3]張 勇 馮玉才:XML數(shù)字簽名技術(shù)及其在Java中的具體實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2003,9

[4]http://www.w3.org/TR/2008/PER-xmldsig-core-20080326/

[5]郭競樂 趙正德等:XML 數(shù)字簽名技術(shù)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,05

[6]于國良 韓文報:XML的簽名[J].計(jì)算機(jī)工程與應(yīng)用,2006,07

主站蜘蛛池模板: 成人国产精品网站在线看| 日韩午夜片| 久久午夜夜伦鲁鲁片不卡| 久久综合成人| 色国产视频| 国内精自视频品线一二区| 国产日本欧美亚洲精品视| 久久人搡人人玩人妻精品一| 91在线无码精品秘九色APP| 国产91特黄特色A级毛片| 国产香蕉一区二区在线网站| 国产日本欧美亚洲精品视| 在线一级毛片| 国产成人免费| 尤物精品视频一区二区三区| 国产极品美女在线观看| 精品国产免费观看| 国产真实自在自线免费精品| 国产精品自拍露脸视频| 在线看AV天堂| 人妻丝袜无码视频| 99热最新网址| 无码精油按摩潮喷在线播放| 婷婷六月综合网| 午夜日韩久久影院| 中文字幕无线码一区| 亚洲欧美极品| 亚洲av无码片一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 成人精品区| 国产国模一区二区三区四区| 国产亚洲欧美在线中文bt天堂 | 国产美女人喷水在线观看| 老司机精品99在线播放| 99久视频| 亚洲区欧美区| 亚洲精品不卡午夜精品| 久久免费观看视频| 91九色最新地址| 久久综合国产乱子免费| 成年人久久黄色网站| 欧洲亚洲一区| 精品视频一区二区三区在线播| 久久黄色免费电影| 国产精品中文免费福利| 亚洲综合婷婷激情| www中文字幕在线观看| 亚洲欧美日韩另类在线一| 国产主播喷水| 国产午夜精品一区二区三| 国内精品久久久久久久久久影视 | 91成人在线免费视频| 青草娱乐极品免费视频| 国产成人精品第一区二区| 亚洲中久无码永久在线观看软件| 欧美一级高清免费a| 欧美无专区| 国产偷倩视频| 国产精品永久免费嫩草研究院| 2020国产在线视精品在| 亚洲AV无码久久精品色欲| 欧美精品啪啪| 成人在线观看不卡| 精品自窥自偷在线看| 成人免费午夜视频| www.亚洲国产| 久久综合五月婷婷| 国产精品一区不卡| 亚洲精品无码在线播放网站| 精品一区二区三区水蜜桃| 免费av一区二区三区在线| 99人体免费视频| 午夜日b视频| 特级毛片8级毛片免费观看| 欧美亚洲日韩不卡在线在线观看| 国内老司机精品视频在线播出| 欧美成人精品高清在线下载| 国产欧美日本在线观看| 欧洲日本亚洲中文字幕| 国产一区二区三区夜色| 久久国产精品电影| 国产高颜值露脸在线观看|