久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

網(wǎng)上數(shù)字簽名系統(tǒng)

 ysy102 2011-08-13
網(wǎng)上數(shù)字簽名系統(tǒng)

摘 要 Internet網(wǎng)絡(luò)走進(jìn)千家萬戶的今天,。網(wǎng)上在線申請(qǐng)業(yè)務(wù)變得越來越普遍,。本系統(tǒng)采用數(shù)字簽名技術(shù),,在保障用戶申請(qǐng)文件及網(wǎng)絡(luò)上傳過程中安全性的同時(shí),保障了傳輸文件的完整性及真?zhèn)蔚目沈?yàn)證性。

關(guān)鍵詞 網(wǎng)絡(luò)安全,,數(shù)字簽名, SHA1WithDSA,公鑰加密技術(shù)

一,、引言

隨著Internet的飛速發(fā)展,,網(wǎng)上業(yè)務(wù)申請(qǐng)變得越來越普及,經(jīng)常會(huì)出現(xiàn)雙方在不見面的情況下,,通過申請(qǐng)文件的提交,達(dá)到業(yè)務(wù)申請(qǐng)的目的,。由于Internet網(wǎng)絡(luò)的一些不安全因素,,提交的申請(qǐng)文件可能在網(wǎng)上傳輸?shù)倪^程中,被劫取,、篡改,、偽造或發(fā)生發(fā)送方抵賴等問題。那么如何保證申請(qǐng)文件的真實(shí)性,、在網(wǎng)絡(luò)傳輸中的完整性及申請(qǐng)人的不可抵賴性就成了安全地完成網(wǎng)絡(luò)業(yè)務(wù)申請(qǐng)的關(guān)鍵,。

簽名是證明當(dāng)事者的身份和數(shù)據(jù)真實(shí)性的一種信息,可以用不同的形式來表示,。一種完善的簽名應(yīng)滿足以下三個(gè)條件:簽名者事后不能抵賴自己的簽名,;任何其他人不能偽造簽名;如果當(dāng)事人雙方關(guān)于簽名的真?zhèn)伟l(fā)生爭(zhēng)執(zhí),,能夠在公正的仲裁者面前通過驗(yàn)證來確認(rèn)其真?zhèn)巍?/font>

在傳統(tǒng)的書面文件為基礎(chǔ)的事務(wù)處理中,,手簽、印章,、手印等書面簽名基本上滿足以上條件,,因而得到司法部門的支持,具有一定的法律意義,。

在以計(jì)算機(jī)文件為基礎(chǔ)的現(xiàn)代事務(wù)處理中,,采用電子形式的簽名。目前的數(shù)字簽名是建立在公開密鑰體制基礎(chǔ)上,,它是公開密鑰加密技術(shù)的另一類應(yīng)用,。它的主要方式是:報(bào)文的發(fā)送方從報(bào)文文本中生成一個(gè)128位的散列值(或報(bào)文摘要);發(fā)送方用自己的私人密鑰對(duì)這個(gè)散列值進(jìn)行加密來形成發(fā)送方的數(shù)字簽名,。然后,,這個(gè)數(shù)字簽名將作為報(bào)文的附件和報(bào)文一起發(fā)送給報(bào)文的接收方;報(bào)文的接收方首先從接收到的原始報(bào)文中計(jì)算出128位的散列值(或報(bào)文摘要),,接著再用發(fā)送方的公用密鑰來對(duì)報(bào)文附加的數(shù)字簽名進(jìn)行解密,。如果兩個(gè)散列值相同,、那么接收方就能確認(rèn)該數(shù)字簽名是發(fā)送方的。

通過數(shù)字簽名能夠?qū)崿F(xiàn)對(duì)原始報(bào)文的鑒別,,我國(guó)1995年制定了自己的數(shù)字簽名標(biāo)準(zhǔn)(GB15851-1995),,使其具有法律意義,由于數(shù)字簽名利用密鑰技術(shù)進(jìn)行,,因而可以獲得比書面簽名更高的安全性,。

公開密鑰加密技術(shù)的體制是,申請(qǐng)人具有一對(duì)密鑰,,一個(gè)是私鑰,,自行保存,用于文件的數(shù)字簽名,;一個(gè)是公鑰,,公開發(fā)布,用于接收方驗(yàn)證簽名,。由于私鑰只有申請(qǐng)人自己持有,,而且只有用申請(qǐng)人的私鑰加密的文件,才能用申請(qǐng)人的公鑰進(jìn)行解密驗(yàn)證,,所以在保障信息安全的同時(shí),,保障了申請(qǐng)人的不可抵賴性。

本文的數(shù)字簽名方式采用的是公開密鑰算法DSA和報(bào)文摘要算法SHA-1的融合,。

二,、系統(tǒng)的設(shè)計(jì)

本系統(tǒng)分為客戶端和服務(wù)器端,客戶端軟件采用Java技術(shù)生成用戶所需密鑰對(duì),,并產(chǎn)生簽名文件;服務(wù)端采用JSP技術(shù)實(shí)現(xiàn)客戶申請(qǐng)文件的上傳,,接受方則利用客戶端軟件進(jìn)行申請(qǐng)文件的簽名驗(yàn)證,。

1.客戶端

(1) 密鑰對(duì)的生成方法keyPair()

1) 相關(guān)介紹

KeyPairGenerator 類:用于生成公鑰和私鑰對(duì)。密鑰對(duì)生成器是使用 getInstance 工廠方法(返回一個(gè)給定類的實(shí)例的靜態(tài)方法)構(gòu)造的,。 特定算法的密鑰對(duì)生成器創(chuàng)建可與此算法一起使用的公鑰/私鑰對(duì),,也將每個(gè)生成的密鑰與特定于算法的參數(shù)相關(guān)聯(lián)。每個(gè)提供程序都必須提供(并記錄)默認(rèn)的初始化,,以防客戶沒有顯式初始化 KeyPairGenerator(通過調(diào)用 initialize 方法),。例如,Sun 提供程序使用 1024 位的默認(rèn)模大?。荑€大?。?/span>

2) 核心源碼

KeyPairGenerator keyGen=KeyPairGenerator.getInstance("DSA");//使用DSA算法

keyGen.initialize(1024,new SecureRandom());

KeyPair pair=keyGen.generateKeyPair();

PublicKey pub=pair.getPublic();

PrivateKey priv=pair.getPrivate();

pubkey=pub.getEncoded();

privKey= priv.getEncoded();

fileOut=new FileOutputStream("sigPublicKey.dat");//輸出簽名公鑰文件

fileOut.write(pubkey);

fileOut.close();

fileOut=new FileOutputStream("sigPrivateKey.dat");//輸出簽名私鑰文件

fileOut.write(privKey);

fileOut.close();

(2) 數(shù)字簽名方法signFile()

1) 相關(guān)介紹

KeyFactory 類:密鑰工廠是用來將 keysKey 類型的不透明加密密鑰)轉(zhuǎn)換成 key 規(guī)范(基礎(chǔ)密鑰材料的透明表示),,反之亦然,。 密鑰工廠是雙向的,。也就是說,它們?cè)试S根據(jù)一個(gè)給定的密鑰規(guī)范(密鑰材料)來建造一個(gè)不透明的密鑰對(duì)象,,也可以檢索以合適格式表示的密鑰對(duì)象的基礎(chǔ)密鑰材料,。

2) 核心源碼

fileIn2=new FileInputStream(jTextField2.getText()); //獲取私鑰文件

byte[] encodedprivKey=new byte[fileIn2.available()];

fileIn2.read(encodedprivKey);

fileIn2.close();

PKCS8EncodedKeySpec privKeySpec= new PKCS8EncodedKeySpec(encodedprivKey);

KeyFactory keyFactory=KeyFactory.getInstance("DSA");

PrivateKey privKey=keyFactory.generatePrivate(privKeySpec);

Signature dsa=Signature.getInstance("SHA1WithDSA"); //簽名采用DSASHA1融合算法

dsa.initSign(privKey);

FileInputStream fis=new FileInputStream(jTextField1.getText()); //獲取原文件

while(fis.available()!=0){

temp=(byte)fis.read();

dsa.update(temp);

}

fis.close();

byte[] sig=dsa.sign();

fileOut1=new FileOutputStream(jTextField3.getText()); //輸出簽名文件

fileOut1.write(sig);

fileOut1.close();

JOptionPane.showMessageDialog(null, "簽名文件生成成功 "+jTextField3.getText(),"確認(rèn)消息", JOptionPane.INFORMATION_MESSAGE);

(3) 簽名驗(yàn)證方法verifyFile()

1) 相關(guān)介紹

Signature 類:用來為應(yīng)用程序提供數(shù)字簽名算法功能。其方法public final byte[] sign() throws SignatureException返回所有已更新數(shù)據(jù)的簽名字節(jié),,簽名的格式取決于基礎(chǔ)簽名方案,;方法public final boolean verify(byte[] signature) throws SignatureException,驗(yàn)證傳入的簽名,。

2) 核心源碼

fileIn3=new FileInputStream(jTextField5.getText()); //獲取公鑰文件

byte[] encodedpubKey =new byte[fileIn3.available()];

fileIn3.read(encodedpubKey);

fileIn3.close();

X509EncodedKeySpec pubKeySpec= new X509EncodedKeySpec(encodedpubKey);

KeyFactory keyFactory=KeyFactory.getInstance("DSA");

PublicKey pubKey=keyFactory.generatePublic(pubKeySpec);

FileInputStream sigStream=new FileInputStream(jTextField6.getText()); //獲取簽名文件

byte[] signature=new byte[sigStream.available()];

sigStream.read(signature);

sigStream.close();

Signature sigObj=Signature.getInstance("SHA1WithDSA");

sigObj.initVerify(pubKey);

fileIn4=new FileInputStream(jTextField4.getText());

byte temp;

while((fileIn4.available())!=0)

{

temp=(byte)fileIn4.read();

sigObj.update(temp);

};

fileIn4.close();

boolean verifies;

if( verifies=sigObj.verify(signature))

JOptionPane.showMessageDialog(null, jTextField4.getText()+" 文件驗(yàn)證通過","確認(rèn)消息", JOptionPane.INFORMATION_MESSAGE);

else

JOptionPane.showMessageDialog(null, jTextField4.getText()+" 文件驗(yàn)證失敗","確認(rèn)消息", JOptionPane.INFORMATION_MESSAGE);

}

2.服務(wù)器

本程序這部分主要為了程序演示,,采用JSP技術(shù)實(shí)現(xiàn)了文件上傳功能。為了實(shí)現(xiàn)穩(wěn)定的上傳功能,,程序使用第三方的類庫cos,。文件fileload.jsp主要代碼如下:

// 上傳文件

MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"GBK" );

<%

// 取得所有上傳文件名稱

Enumeration filesname = multi.getFileNames();

while (filesname.hasMoreElements())

{

String name = (String) filesname.nextElement();

fileName = multi.getFilesystemName(name);

File f = multi.getFile(name);

String ContentType = multi.getContentType(name);

if (fileName != null)

{

count ++;

%>

<font color="red">您上傳的第<%= count %>個(gè)文件:</font><br>

文件名:<%= fileName %><br>

文件類型:<%= ContentType %><br>

文件描述:<%= fileDescription[count-1] %><br><br>

<%

}

}

%>

三、運(yùn)行結(jié)果

程序已在NetBeans IDE 5.0+j2sdk1.5環(huán)境調(diào)試成功,,服務(wù)器軟件采用Tomcat 5,。

客戶端軟件運(yùn)行效果如圖1所示。


1 客戶端顯示界面

1.在圖1中點(diǎn)擊“生成密鑰對(duì)”按鈕,,即在當(dāng)前目錄生成公鑰文件sigPublicKey.dat和私鑰文件sigPrivateKey.dat,,生成完畢后會(huì)彈出密鑰生成成功消息框,私鑰文件自己保留,,公鑰文件公開發(fā)布,。

2.在圖1中,選擇原文件和私鑰文件,,輸入保存的簽名文件名,,然后點(diǎn)擊“生成簽名文件”按鈕,生成指定的數(shù)字簽名文件,。

3.文件上傳頁面fileload.html(如圖2所示),,在上傳時(shí),將原文件和生成的簽名文件一同打包上傳,。


2 上傳頁面

4.接收方同樣運(yùn)行客戶端軟件,,選擇原文件和發(fā)送方的公鑰文件,發(fā)送方的簽名文件,,然后點(diǎn)擊“文件簽名驗(yàn)證”按鈕,,如果驗(yàn)證通過,則彈出消息確認(rèn)框(如圖3所示),,如驗(yàn)證失敗,,則彈出驗(yàn)證失敗消息框。


3 消息確認(rèn)框

四、結(jié)語

目前,,數(shù)字簽名技術(shù)已成為計(jì)算機(jī)網(wǎng)絡(luò)信息安全方面的一項(xiàng)重要技術(shù),用于數(shù)字簽名的公開密鑰體制除了本文用到的DSA算法,,常用的算法還有RSA算法和橢圓曲線算法。本文所闡述數(shù)字簽名技術(shù)主要用于網(wǎng)上申請(qǐng)文件方面,,當(dāng)然此程序同樣適用于各類電子文件的數(shù)字簽名,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多