麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

用JAVA做數(shù)字簽名

2019-11-18 13:27:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  數(shù)字簽名常被用來(lái)校驗(yàn)軟件及軟件制造者,以保證軟件代碼沒(méi)有被任何方式
  
  玷污。
  
  或者通俗地講,使用數(shù)字簽名可以確保軟件的“清潔”和“正宗”,即軟件
  
  從其制造者或出版商處直到最終用戶手中這段時(shí)間里未被他人篡改過(guò)。
  
  本文在對(duì)數(shù)字簽名的有關(guān)概念進(jìn)行簡(jiǎn)單回顧后,給出了用java來(lái)創(chuàng)建和使用
  
  數(shù)字簽名的具體方法。
  
  一、數(shù)字簽名及其功能
  
  數(shù)字簽名算法(DSA) 是“公共密鑰加密算法”中的一種,因此讓我們從
  
  “私有密鑰/公共密鑰”開(kāi)始進(jìn)行簡(jiǎn)單回顧。
  
  1. 私有密鑰加密及其局限性
  
  私有密鑰加密系統(tǒng)使用唯一的密鑰(即私有密鑰)進(jìn)行加密和解密。該密鑰
  
  必須為發(fā)送者和接收者所共享。即,若甲要向乙發(fā)一個(gè)加密郵件,甲需用一密鑰
  
  將信息加密;乙收到郵件后,須用同樣的密鑰將信息解密。
  
  該方法顯然有非常嚴(yán)重的缺點(diǎn)。例如,接收雙方必須擁有同樣的密鑰,這要
  
  求一定要有一種安全的協(xié)議來(lái)保證密鑰傳送的可靠;第二,有緊急的加密消息需
  
  要發(fā)送時(shí),可能因接收方?jīng)]有密鑰而不能完成傳送;第三,若要將消息發(fā)給許多
  
  不同的團(tuán)體,就需要與各個(gè)團(tuán)體對(duì)應(yīng),維護(hù)許多不同的密鑰。
  
  為克服私有密鑰加密系統(tǒng)的這些弱點(diǎn),人們引進(jìn)了公共密鑰加密系統(tǒng)。
  
  2. 公共密鑰加密
  
  公共密鑰加密不需要一條信息的發(fā)送者和接收者知道對(duì)方的密鑰,就能訪問(wèn)
  
  該加密信息。
  
  公共密鑰加密系統(tǒng)使用密鑰對(duì)(公共密鑰和私有密鑰)來(lái)加密和解密信息。
  
  其加密思想也非常簡(jiǎn)單:用公共密鑰加密的信息只能用與之對(duì)應(yīng)的私有密鑰解開(kāi);
  
  而用私有密鑰加密的信息,任何擁有與之對(duì)應(yīng)的公共密鑰的人均可解開(kāi)。因此,私
  
  有密鑰總為個(gè)人保管而無(wú)須外傳,公共密鑰則可授權(quán)給他人使用而不會(huì)破壞安全
  
  性,公共密鑰和私有密鑰之間永遠(yuǎn)存在著一對(duì)一的關(guān)系。具體地講即:
  
  第一,若信息是用接收方的公共密鑰加密的,則只有應(yīng)該收到此消息的人
  
  才能對(duì)之解密(即只有擁有與該公共密鑰對(duì)應(yīng)的私有密鑰的人才可解密)。例如,
  
  甲要向乙發(fā)一個(gè)加密郵件,甲必須用乙的公共密鑰加密信息后再傳給乙。
  
  第二,若信息是用發(fā)送方的私有密鑰加密的,則任何擁有發(fā)送方公共密鑰的
  
  接收者都可以對(duì)信息進(jìn)行解密,從而確定該信息確實(shí)是來(lái)自該發(fā)送者,并且信息
  
  內(nèi)容未遭到任何無(wú)意或惡意的破壞。
  
  上述第二點(diǎn)正是數(shù)字簽名的含義。
  
  3. 數(shù)字簽名的功能
  
  一個(gè)數(shù)字簽名是一個(gè)定長(zhǎng)的二進(jìn)制數(shù)字流,其內(nèi)容附著于被簽名的數(shù)據(jù)之上。
  
  它可以和任何種類的數(shù)字?jǐn)?shù)據(jù)一起使用,除最普通的代碼軟件外。還可用在口令、
  
  電子郵件及電子文檔中。數(shù)字簽名的主要功能為:防止原始文檔被污染或變更;
  
  防止別有專心者使用他人名字散布欺騙性消息;以及,提供誰(shuí)是文件原作者的證
  
  據(jù),等等。
  
  二、用JAVA創(chuàng)建及使用數(shù)字簽名
  
  除了上面提到的功能外,用JAVA做數(shù)字簽名還有更現(xiàn)實(shí)的意義。最常見(jiàn)的是:
  
  應(yīng)用數(shù)字簽名可以突破瀏覽器在安全性方面的某些限制。例如,你的瀏覽器一般
  
  會(huì)拒絕網(wǎng)上的JAVA程序讀寫你本地硬盤的文件或獲取你的本地信息(如你的用戶
  
  名稱等),哪怕你確認(rèn)該JAVA程序是“可靠的”(其實(shí)你不可能完全確認(rèn)來(lái)自網(wǎng)
  
  上的某個(gè)程序真的是“可靠的”)。若你確要運(yùn)行該JAVA程序,你必須關(guān)閉瀏覽
  
  器的安全檢查功能,但這無(wú)異于將本地系統(tǒng)置為“不設(shè)防的城池”。使用數(shù)字簽
  
  名可完美地解決這個(gè)問(wèn)題:當(dāng)瀏覽器“感覺(jué)”到你使用的是簽名后的JAVA小程序后,
  
  它會(huì)自動(dòng)搜索與之匹配的數(shù)字簽名并進(jìn)行校驗(yàn),若成功則瀏覽器認(rèn)定該JAVA小程序
  
  是“值得信任的”,于是放行。這樣,既保證了安全性,又可以讓真正“可信的”的JAVA程序擁有許多特權(quán)(見(jiàn)下述JAVA程序)。
  
  在 JDK1.1 中,與數(shù)字簽名有關(guān)的工作是由工具程序 javakey 來(lái)完成的。
  
  javakey 是 Sun 提供的一個(gè)命令行工具,用來(lái)為存檔文件(jar 文件)生成數(shù)
  
  字簽名并治理密鑰數(shù)據(jù)庫(kù)
  
  下面我們將通過(guò)一個(gè)具體例子來(lái)看一看創(chuàng)建和使用數(shù)字簽名的步驟,有關(guān)概
  
  念和解釋將在例子中給出。
  
  1. Java 程序及數(shù)字簽名的創(chuàng)建 (加密方或簽字者應(yīng)執(zhí)行的步驟)
  
  下面的JAVA小程序非常簡(jiǎn)單,它的主要功能為:獲取 Win95/98系統(tǒng)當(dāng)前登錄
  
  用戶的名稱字符串,然后將之寫入本地硬盤當(dāng)前目錄的 Test.Txt 文件上。
  
  import java.awt.*;
  
  import java.io.*;
  
  import java.lang.*;
  
  import java.applet.*;
  
  public class MyApp extends Applet {
  
  DataOutputStream out_file;
  
  public void paint(Graphics g) {
  
  try {
  
  String YourName = System.get  
  out_file = new DataOutputStream(new FileOutputStream("Test.Txt"));
  
  out_file.writeChars("Your Name: "+YourName+"/n");
  
  out_file.close();
  
  g.drawString("Your Name has been written to file ", 20, 20);
  
  }
  
  catch (IOException e) {
  
  g.drawString("File i/o error", 12, 12);
  
  }
  
  catch (SecurityException se) {
  
  g.drawString("You can NOT write to disk or get User Name.", 12, 12);
  
  }
  
  }
  
  }
  
  // End of MyApp.java
  
  將 MyApp.java 編譯為 MyApp.class 后,用下面的 MyApp.Html 送往瀏覽器
  
  (命令為 appletviewer MyApp.html)。
   用JAVA做數(shù)字簽名
  /* End of MyApp.html */
  
  我們發(fā)現(xiàn)瀏覽器上顯示的是“You can NOT write to disk or get User Name”。
  
  這是因?yàn)楂@取用戶名和寫本地硬盤均是系統(tǒng)安全特性所禁止的。
  
  下面我們創(chuàng)建一個(gè)數(shù)字簽名,以便該程序的使用者無(wú)須變更瀏覽器的安全檢查
  
  特性就能完成程序功能(即:讀用戶名,寫入文件)。
  
  第一步:創(chuàng)建一個(gè)實(shí)體,并將之設(shè)為“可信的”。
  
  javakey -cs Kompass true
  
  此處的實(shí)體是指簽字者(個(gè)人、公司或組織),這里假定為“Kompass”。參
  
  數(shù)“-cs”告訴 javakey創(chuàng)建一個(gè)簽字者并將之放入數(shù)據(jù)庫(kù)中(不帶參數(shù)運(yùn)行javakey
  
   
  
  將得到具體幫助信息)。可選參數(shù)“true”表示簽字者“Kompass”是“可信
  
  的”(缺省值是“不可信”)。
  
  第二步:生成密鑰對(duì)(公共密鑰和私有密鑰)并輸出至文件(可選)。
  
  javakey -gk Kompass DSA 512 Kompass_pub Kompass_priv
  
  其中“DSA”是加密算法的名字,“512”是密鑰的長(zhǎng)度,“Kompass_pub”、
  
  “Kompass_priv”分別是兩個(gè)密鑰輸出文件的名字。
  
  第三步:生成一個(gè)許可證(certificate)。
  
  javakey -gc cert_directive_Kompass
  
  這里的許可證即為可以交給接收方的數(shù)字簽名。
  
  上面的參數(shù)“cert_directive_Kompass”并不是輸出文件名,而是一個(gè)缺省
  
  參數(shù)配置文件名。通俗地講,它象是一個(gè)“.ini”文件,javakey 根據(jù)該文件的
  
  內(nèi)容決定如何生成一個(gè)許可證。因此,簽字者在執(zhí)行本步驟之前必須用文本編輯
  
  器先生成這個(gè)配置文件(學(xué)名叫指示文件--directive file)。
  
  以下給出文件 cert_directive_Kompass 的內(nèi)容:
  
  issuer.name=Kompass
  
  issuer.cert=1
  
  subject.name=Kompass
  
  subject.real.name=Kompass
  
  subject.org.unit=JavaSoft
  
  subject.org=Sun MicroSystems
  
  subject.country=US
  
  start.date=31 May 1999
  
  end.date=30 May 2012
  
  serial.number=1001
  
  out.file=Kompass.key
  
  /* End of cert_directive_Kompass */
  
  從上面最后一行可以看出,輸出文件的名字被定義為“Kompass.key”,即:
  
  數(shù)字簽名“Kompass.key”連同簽字后的文件將一同被發(fā)給接收者。
  
  上述文件包括的其它信息主要有:發(fā)行者信息(issuer)、主題信息
  
  (subject)、許可證信息(有效期限及序列號(hào))等。
  
  第四步:創(chuàng)建存檔文件( jar 文件)。
  
  jar cf signMyApp.jar MyApp.class MyApp.html
  
  這里需要說(shuō)明的是,jar是 Sun提供的另一個(gè)命令行工具,用于生成和維護(hù)
  
  存檔文件( .jar 文件)。 jar是一個(gè)打包工具,它可將JAVA小程序連同有關(guān)的
  
  聲音、圖像、動(dòng)畫(huà)等文件一起打包成一個(gè)文件以便于JAVA產(chǎn)品

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成av在线| fc2成人免费人成在线观看播放 | 色玖玖综合 | 毛片视频网站 | 成人激情综合网 | 国产精品剧情一区二区三区 | 免费淫视频 | 亚洲网站免费观看 | 免费毛片电影 | 国产老师做www爽爽爽视频 | 国产亚洲精久久久久久蜜臀 | 91av日韩| 黄色视频一级毛片 | 欧美亚洲国产一区 | 精品99在线视频 | 国产精品自拍av | va视频 | 亚洲极色 | 依依成人综合 | 亚洲一区成人在线 | 欧美aaaaaaaa| 91美女啪啪| 操碰视频在线观看 | 污视频在线看 | 爱福利视频网 | 免费国产在线视频 | 黄色a级片免费观看 | 精品一区二区三区免费看 | 国产一区二区三区四区五区在线 | 免费国产自久久久久三四区久久 | 国产亚洲精品精 | www.99久久久 | 黄色片网站免费在线观看 | 久草在线手机视频 | 91免费视频版 | 色天天综合网 | 国产精品视频二区不卡 | 男女羞羞视频在线免费观看 | 中国av中文字幕 | 人人舔人人舔 | 黄色大片大毛片 |