亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Java安全通信、數字證書及應用實踐

2019-11-18 14:28:48
字體:
來源:轉載
供稿:網友
摘要

  在本文中,我用具體的語言和大量的圖片及完整的程序源碼向你展示了在 java中如何實現通過消息摘要、消息驗證碼達到安全通信、以及用Java的工具生成數字證書,和用程序給數字證書簽名、以及用簽名后的數學證書簽名applet突破applet的訪問權限的過程,給出了全部例子的具體代碼。

  通過本文中你可以學到以下知識:

   ● 程序間如何安全通信

   ● 什么是 及 如何生成消息摘要

   ● 什么是 及 如何生成消息驗證碼

   ● 如何使用 Java工具生成和維護數字證書庫

   ● 如何用程序給數字證書驗證簽名

   ● 如何利用數字證書給 applet簽名突破applet的訪問權限

  要害字

  消息摘要、消息驗證碼、指紋、加密、安全、 Java、數字簽名、applet、數字證書

  一、基礎知識

  計算機安全通信過程中,常使用消息摘要和消息驗證碼來保證傳輸的數據未曾被第三方修改。

  消息摘要是對原始數據按照一定算法進行計算得到的結果,它主要檢測原始數據是否被修改過。消息摘要與加密不同,加密是對原始數據進行變換,可以從變換后的數據中獲得原始數據,而消息摘要是從原始數據中獲得一部分信息,它比原始數據少得多,因此消息摘要可以看作是原始數據的指紋。

  例:下面一段程序計算一段字符串的消息摘要

package com.messagedigest;
import java.security.*;
public class DigestPass {
 public static void main(String[] args) throws Exception{
  String str="Hello,I sent to you 80 yuan.";
  MessageDigest md = MessageDigest.getInstance("md5");//常用的有MD5,SHA算法等
  md.update(str.getBytes("UTF-8"));//傳入原始字串
  byte[] re = md.digest();//計算消息摘要放入byte數組中
  //下面把消息摘要轉換為字符串
  String result = "";
  for(int i=0;i<re.length;i++){
   result += Integer.toHexString((0x000000ff&re[i])0xffffff00).substring(6);
  }
  System.out.PRintln(result);
 }
}
  當我們有時需要對一個文件加密時,以上方式不再適用。

  又例:下面一段程序計算從輸入(出)流中計算消息摘要。

package com.messagedigest;
import java.io.*;
import java.security.*;
public class DigestInput {
 public static void main(String[] args) throws Exception{
  String fileName = "test.txt";
  MessageDigest md = MessageDigest.getInstance("MD5");
  FileInputStream fin = new FileInputStream(fileName);
  DigestInputStream din = new DigestInputStream(fin,md);//構造輸入流
  //DigestOutputStream dout = new DigestOutputStream(fout,md);
  //使用輸入(出)流可以自己控制何時開始和關閉計算摘要
  //也可以不控制,將全過程計算
  //初始時是從開始即開始計算,如我們可以開始時關閉,然后從某一部分開始,如下:
  //din.on(false);
  int b;
  while((b=din.read())!=-1){
   //做一些對文件的處理
   //if(b=='$') din.on(true); //當碰到文件中的符號$時才開始計算
  }
  byte[] re = md.digest();//獲得消息摘要
  //下面把消息摘要轉換為字符串
  String result = "";
  for(int i=0;i<re.length;i++){
   result += Integer.toHexString((0x000000ff&re[i])0xffffff00).substring(6);
  }
  System.out.println(result);
 }
}
  當A和B通信時,A將數據傳給B時,同時也將數據的消息摘要傳給B,B收到后可以用該消息摘要驗證A傳的消息是否正確。這時會產生問題,即若傳遞過程中別人修改了數據時,同時也修改了消息摘要。B就無法確認數據是否正確。消息驗證碼可以解決這一問題。

  使用消息驗證碼的前提是 A和B雙方有一個共同的密鑰,這樣A可以將數據計算出來的消息摘要加密后發給B,以防止消息摘要被改。由于使用了共同的密鑰,所以稱為“驗證碼”。

  例、下面的程序即可利用共同的密鑰來計算消息摘要的驗證碼

package com.mac;
import java.io.*;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.*;
public class MyMac {
 public static void main(String[] args) throws Exception{
  //這是一個消息摘要串
  String str="TestString";
  //共同的密鑰編碼,這個可以通過其它算法計算出來
  byte[] kb={11,105,-119,50,4,-105,16,38,-14,-111,21,-95,70,-15,76,-74,
    67,-88,59,-71,55,-125,104,42};
  //獲取共同的密鑰
  SecretKeySpec k = new SecretKeySpec(kb,"HMACSHA1");
  //獲取Mac對象
  Mac m = Mac.getInstance("HmacMD5");
  m.init(k);
  m.update(str.getBytes("UTF-8"));
  byte[] re = m.doFinal();//生成消息碼
  //下面把消息碼轉換為字符串
  String result = "";
  for(int i=0;i<re.length;i++){
   result += Integer.toHexString((0x000000ff&re[i])0xffffff00).substring(6);
  }
  System.out.println(result);
 }
}
  使用以上兩種技術可以保證數據沒有經過改變,但接收者還無法確定數據是否確實是某個人發來的。盡管消息碼可以確定數據是某個有同樣密鑰的人發來的,但這要求雙方具有共享的密鑰,若有一組用戶共享,我們就無法確定數據的來源了。

  數字簽名可以解決這一問題。數字簽名利用非對稱加密技術,發送者使用私鑰加密數據產生的消息摘要(簽名),接收者使用發送者的公鑰解密消息摘要以驗證簽名是否是某個人的。由于私鑰只有加密者才有,因此假如接收者用某個公鑰解密了某個消息摘要,就可以確定這段消息摘要必然是對應的私鑰持有者發來的。

  使用數字簽名的前提是接收數據者能夠確信驗證簽名時(用發送者的私鑰加密消息摘要)所用的公鑰確實是某個人的 (因為有可能有人假告公鑰)。數字證書可以解決這個問題。

  數字證書含有兩部分數據:一部分是對應主體(單位或個人)的信息,另一部分是這個主體所對應的公鑰。即數字證書保存了主體和它的公鑰的一一對應關系。同樣,數字證書也有可能被假造,如何判定數字證書的內容的真實性呢?所以,有效的數字證書必須經過權威 CA的簽名,即權威CA驗證數字證書的內容的真實性,然后再在數字證書上使用自己的私鑰簽名(相當于在證書加章確認)。

  這樣,當用戶收到這樣的數字證書后,會用相應的權威 CA的公鑰驗證該證書的簽名(因為權威的CA的公鑰在操作系統中己經安裝)。根據非對稱加密的原理,假如該證書不是權威CA簽名的,將不能通過驗證,即該證書是不可靠的。

  若通過驗證,即可證實此證書含的信息(發信人的公鑰和信息)是無誤的。于是可以信任該證書,便可以通過該證書內含的公鑰來確認數據確實是發送者發來的。

  于是,雙方通信時, A把數據的消息摘要用自己的私鑰加密(即簽名),然后把自己的數字證書和數據及簽名后的消息摘要一起發送給B,B處查看A的數字證書,假如A的數字證書是經過權威CA驗證可靠的,便信任A,便可使用A的數字證書中附帶的A的公鑰解密消息摘要(這一過程同時確認了發送數據的人又可以解密消息摘要),然后通過解密后的消息摘要驗證數據是否正確無誤沒被修改。

  利用這一原理,我們可以突破 java的applet小程序在瀏覽器中的權限,由于默認的applet權限控制不答應它訪問操作系統級的一切。于是我們可以用我們數字證書來給applet簽名,然后客戶端收到該applet時,系統會自動查看給該applet簽名的數字證書并提供給終端用戶判定是否信認該數字證書,假如用戶信認,則該applet便有了訪問系統的權限。 二、 Java中的數字證書的生成及維護方法

  Java中的keytool.exe可以用來創建數字證書,所有的數字證書是以一條一條(采用別名區別)的形式存入證書庫的中,證書庫中的一條證書包含該條證書的私鑰,公鑰和對應的數字證書的信息。證書庫中的一條證書可以導出數字證書文件,數字證書文件只包括主體信息和對應的公鑰。

  每一個證書庫是一個文件組成,它有訪問密碼,在首次創建時,它會自動生成證書庫,并要求指定訪問證書庫的密碼。

  在創建證書的的時候,需要填寫證書的一些信息和證書對應的私鑰密碼。這些信息包括 CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx,它們的意思是:

  CN(Common Name名字與姓氏)

  OU(Organization Unit組織單位名稱)

  O(Organization組織名稱)

  L(Locality城市或區域名稱)

  ST(State州或省份名稱)

  C(Country國家名稱)

  可以采用交互式讓工具提示輸入以上信息,也可以采用參數

-dname "CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx"來自動創建。

  1、示例

  如下所示一句采用交互式創建一個證書,指定證書庫為 abnerCALib,創建別名為abnerCA的一條證書,它指定用RSA算法生成,

  且指定密鑰長度為 1024,證書有效期為3650天:


  如下圖所示:


  上圖中最后一步,我們輸入的是 CN,代表中國的縮寫,也可以直接輸入“中國”兩個字。

  2、證書的操作方法

  ● 證書的顯示

  如:


  將顯示 abnerCALib證書庫的的所有證書列表:如下圖示:


  又如: keytool -list -alias abnerCA -keystore abnerCALib

  將顯示 abnerCALib證書庫中別名為abnerCA的證書的信息。如下圖所示:


  又如: keytool -list -v -alias abnerCA -keystore abnerCALib

  將顯示證書的具體信息( -v參數)如下圖所示:

Java安全通信、數字證書及應用實踐(圖一)
點擊查看大圖


  ● 將證書導出到證書文件

  如: keytool -eXPort -alias abnerCA -file abnerCA.cer -keystore abnerCALib
  將把證書庫 abnerCALib中的別名為abnerCA的證書導出到abnerCA.cer證書文件中,

  它包含證書主體的信息及證書的公鑰,不包括私鑰,可以公開,如下圖所示 :


  上面導出的證書文件是以二進制編碼文件,無法用文本編輯器正確顯示,因此不利用公布證書,可以加上 -rfc參數以一種可打印的編者編碼輸出。

  如:

keytool -export -alias abnerCA -file abnerCA.cer -keystore abnerCALib -storepass 100200 –rfc
  這個命令在命令行中指定了證書庫的訪問密碼,同時指定以可查看編碼的方式輸出。
 
  3、通過證書文件查看證書的信息

  通過命令 :keytool –printcert –file abnerCA.cer可以查看證書文件的信息。

  也可以在 windows中雙擊產生的證書文件直接查看。

  ● 證書條目的刪除

  keytool的命令行參數-delete可以刪除密鑰庫中的條目,如:

keytool -delete -alias abnerCA -keystore abnerCALib  
  這條命令將 abnerCALib庫中的abnerCA這一條證書刪除了。

  ● 證書條目口令的修改

  如:

keytool –keypasswd –alias abnerCA –keystore abnerCALib
  可以以交互的方式修改 abnerCALib證書庫中的條目為abnerCA的證書。

Keytool –keypasswd –alias abnerCA –keypass 123456 –new 200100 –storepass 1002 00 –keystore abnerCALib



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品视频免费专区在线播放| 中文在线资源观看视频网站免费不卡| 国产精品天天狠天天看| 色综合色综合久久综合频道88| 最近的2019中文字幕免费一页| 精品中文字幕久久久久久| 国产成人欧美在线观看| 日韩高清a**址| 欧美日本国产在线| 欧美日韩在线视频一区| 亚洲偷熟乱区亚洲香蕉av| 不卡av在线播放| 国产精品激情自拍| 亚洲韩国欧洲国产日产av| 亚洲福利视频在线| 日韩av在线影院| 亚洲精品国精品久久99热| 136fldh精品导航福利| 91免费人成网站在线观看18| 欧美电影第一页| 狠狠躁18三区二区一区| 伦理中文字幕亚洲| 国产精品va在线播放我和闺蜜| 久久久久久久久久久久久久久久久久av| 久久偷看各类女兵18女厕嘘嘘| 亚洲欧美中文在线视频| 国产成人午夜视频网址| 国内自拍欧美激情| 欧美专区在线观看| 懂色aⅴ精品一区二区三区蜜月| 黑人精品xxx一区| 国产精品美女免费视频| 色综合久久88色综合天天看泰| 久久久国产精品x99av| 成人黄色免费在线观看| 中文字幕亚洲国产| 久久精品国产亚洲一区二区| 精品国产一区二区三区在线观看| 国产精品视频yy9099| 亚洲va欧美va国产综合剧情| 亚洲欧美日韩久久久久久| 精品欧美国产一区二区三区| 91精品久久久久久久| 国产精品毛片a∨一区二区三区|国| 青青草国产精品一区二区| 日韩av资源在线播放| 久久影视电视剧免费网站清宫辞电视| 日本在线精品视频| 黑人极品videos精品欧美裸| 中文字幕欧美亚洲| 国内精品国产三级国产在线专| 久久精品国产亚洲精品| 精品小视频在线| 色综合色综合久久综合频道88| 国产精品男人的天堂| 亚洲午夜精品久久久久久性色| 国产一区二区三区毛片| 中文字幕一区二区三区电影| 国产精品99久久久久久人| 91精品国产综合久久香蕉最新版| 久久久久久久久久久91| 久久视频在线观看免费| 国产精品www色诱视频| 欧美日本在线视频中文字字幕| 正在播放欧美视频| 欧美激情综合亚洲一二区| 亚洲国产一区二区三区在线观看| 亚洲精品永久免费精品| 亚洲国语精品自产拍在线观看| 欧美日韩国产一区二区三区| 2019中文字幕在线| 国产精品大片wwwwww| 奇米4444一区二区三区| 91免费欧美精品| 欧美理论电影在线观看| 少妇高潮久久久久久潘金莲| 欧美性一区二区三区| 国产成人精品日本亚洲| 亚洲欧美制服中文字幕| 成人福利免费观看| 欧亚精品中文字幕| 精品视频久久久久久| 91av网站在线播放| 日韩欧美第一页| 中文字幕一精品亚洲无线一区| 中文字幕国产亚洲| 亚洲精品成人av| 精品小视频在线| 亚洲成人久久久久| 97久久久久久| 日韩在线观看av| 欧美日韩性视频| 亚洲人线精品午夜| 92版电视剧仙鹤神针在线观看| 伊人久久大香线蕉av一区二区| 国产啪精品视频| 成人黄色免费在线观看| 亚洲国产精品高清久久久| 国内自拍欧美激情| 国产丝袜精品第一页| 中文字幕不卡av| 欧美激情视频一区| 18性欧美xxxⅹ性满足| 欧美极品在线播放| 日韩一二三在线视频播| 日韩成人在线视频观看| 欧美三级欧美成人高清www| 色婷婷综合成人av| 久久久久久久91| 57pao国产精品一区| 欧美黑人国产人伦爽爽爽| 97在线免费视频| 欧美中文字幕视频| 夜夜嗨av色综合久久久综合网| 久久久精品国产一区二区| 奇米4444一区二区三区| 亚洲欧美日韩精品久久奇米色影视| 91最新国产视频| 亚洲免费人成在线视频观看| 一区二区三区天堂av| 久久久久国产精品一区| 国产一区二区三区在线免费观看| 久久精品成人欧美大片古装| 欧美日韩美女在线| 亚洲专区国产精品| 国产xxx69麻豆国语对白| 欧美日韩一二三四五区| 91久久综合亚洲鲁鲁五月天| 久久久久久久久久久久久久久久久久av| 成人欧美一区二区三区黑人| 日韩激情视频在线播放| 97精品视频在线播放| 国产97人人超碰caoprom| 国产成人精品免费视频| 激情成人在线视频| 一本大道香蕉久在线播放29| 亚洲va国产va天堂va久久| 国产精品美女无圣光视频| 成人精品一区二区三区电影免费| 久久人人爽人人爽爽久久| 亚洲第一精品夜夜躁人人躁| 最好看的2019的中文字幕视频| 日本高清不卡的在线| 亚洲精品视频在线播放| 国产精品久久久久久久久| 欧美激情一二三| 国内精品久久久久久| 亚洲免费av片| 国产精品三级久久久久久电影| 亚洲成人av片在线观看| 狠狠久久亚洲欧美专区| 国产精品免费看久久久香蕉| 78m国产成人精品视频| 久久夜色精品国产欧美乱| 在线播放国产一区中文字幕剧情欧美| 国产精品pans私拍| 成人免费网站在线观看| 九九热精品视频在线播放| 日韩欧美亚洲范冰冰与中字| 欧美不卡视频一区发布| 欧美精品性视频| 亚洲色图av在线| 久久久亚洲成人| 精品中文字幕久久久久久|