国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

用JCE共享Java密鑰

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

  JCE(java密碼擴(kuò)展)為應(yīng)用程序采用Java加密和數(shù)字簽名提供了一種統(tǒng)一和一致的方式。加密類(在java.security和javax.crypto包中)為實(shí)施加密和數(shù)字簽名更實(shí)現(xiàn)了一種相當(dāng)方便的操作方式。這些類所具有的方法還支持保存和獲取密鑰。
  本文采用一組測(cè)試類演示一種共享密鑰信息的方法。重點(diǎn)在于如何在非Java環(huán)境下共享密鑰信息。即便在Java環(huán)境內(nèi),只要出于加密目的而創(chuàng)建了密鑰你多半就希望繼續(xù)使用同樣的密鑰,從而讓加密信息的使用者可以對(duì)這些信息解密。
  JDK 1.4針對(duì)常用加密算法而包含了必要的加密供給者。在1.4版之前安裝JDK的細(xì)節(jié)請(qǐng)參看“Java加密擴(kuò)展基礎(chǔ)?!?br />  格式選擇
  為了同其他平臺(tái)或者編程環(huán)境共享密鑰信息,你首先必須決定交換密鑰的標(biāo)準(zhǔn)。Java實(shí)現(xiàn)了若干種交換標(biāo)準(zhǔn)。ASN.1編碼就是處理密鑰的Java類所采用的默認(rèn)標(biāo)準(zhǔn)規(guī)范。Java Key接口(java.security.Key)規(guī)定了獲取密鑰版本的方法(getEncoded())。其格式可以文件的形式寫入磁盤,以后還可以再被Java讀回。密鑰數(shù)據(jù)的另一種格式就是文本。具體取決于所采用的算法,而這類格式已經(jīng)被定制,因?yàn)楦鞣N算法的需求不同。在采用RSA的情況下,密鑰可以保存密鑰系數(shù)和指數(shù)的方式得以存儲(chǔ)。
  就一般項(xiàng)目而言,這種保存密鑰的方法是最為適合的,因?yàn)槊荑€以普通文本表示,RSA加密總能通過(guò)合適的編碼創(chuàng)建密鑰。因?yàn)檫@種文本表示法不需要讀取ASN.1之類的特定格式,所以這也是一種輕度、簡(jiǎn)便的操作方式。而且任何能生成RSA風(fēng)格密鑰的編程語(yǔ)言都能讀取系數(shù)和指數(shù)來(lái)創(chuàng)建必要的密鑰。
  創(chuàng)建和保存密鑰
  用Java生成密鑰并不復(fù)雜。首先用你所希望的算法和參數(shù)初始化KeyPairGenerator,這樣就可以產(chǎn)生一個(gè)512位的密鑰??紤]到最佳的安全和速度因素,建議你產(chǎn)生2048位的密鑰,不過(guò),對(duì)國(guó)際性應(yīng)用程序而言這樣作可能會(huì)在部署中引發(fā)一些政治性的出口問(wèn)題。通過(guò)KeyPairGenerator即可獲得KeyPair對(duì)象,然后從這里出發(fā)又可以獲得PRivateKey和 PublicKey對(duì)象并把它們轉(zhuǎn)換各自的RSA版本。
  為了保存密鑰,我們可以采用公鑰和私鑰對(duì)象上的方法獲取密鑰的系數(shù)和指數(shù)。系數(shù)和指數(shù)以BigIntegers的形式返回,結(jié)果可能是16進(jìn)制格式的輸出字符串。采用密鑰的16進(jìn)制版本即可采用文本文件的形式保存密鑰供今后采用。在程序清單A中,GenerateRSAKeys類負(fù)責(zé)執(zhí)行以上這些步驟同時(shí)把密鑰寫入文件。以上演示中該類同時(shí)寫入了ASN.1編碼(一種二進(jìn)制文件)和文本(或者16進(jìn)制版本)。
  讀取密鑰
  既然密鑰已經(jīng)保存在磁盤上,那么我們就必須編寫一些代碼從磁盤文件中讀取密鑰數(shù)據(jù)并把這些數(shù)據(jù)轉(zhuǎn)換為Key對(duì)象。 Key對(duì)象是實(shí)現(xiàn)加密、解密、數(shù)字簽名和簽名檢驗(yàn)函數(shù)所必需的。 程序清單B顯示一個(gè)簡(jiǎn)單類,它獲得一個(gè)文件名參數(shù)進(jìn)行初始化操作,這個(gè)文件包含了必要的16進(jìn)制系數(shù)和指數(shù)信息。該類并不關(guān)心密鑰是公有還是私有的。因?yàn)樗粸槠渌脕?lái)創(chuàng)建正確PublicKey或 PrivateKey對(duì)象的類提供系數(shù)和指數(shù)的BigInteger 版本。
  密鑰再造
  在采用讀取密鑰類的情況下,程序現(xiàn)在即可初始化正確的密鑰,然后用密鑰執(zhí)行加密或數(shù)字簽名操作。以上示例采用了兩種類,第1種對(duì)文件進(jìn)行數(shù)字簽名操作,第2種類獲得簽名和對(duì)應(yīng)的密鑰檢驗(yàn)給定文件的簽名。
  為了再造密鑰,我們必須采用系數(shù)和指數(shù)信息創(chuàng)建一個(gè)符合規(guī)范的對(duì)象。對(duì)私鑰來(lái)說(shuō)就是采用RSAPrivateKeySpec,而對(duì)公鑰來(lái)說(shuō)就是RSAPublicKeySpec。密鑰規(guī)范對(duì)象被提交給構(gòu)造Key對(duì)象的 KeyFactory。你可以參看 程序清單C和 程序清單D這個(gè)示范性簽名和檢驗(yàn)程序。為了創(chuàng)建簽名還的調(diào)用SignFile 程序,同時(shí)傳遞給它由創(chuàng)建程序所產(chǎn)生的私鑰和簽名文件。比方說(shuō),在命令行上鍵入 java SignFile private_raw.txt data.txt即可創(chuàng)建簽名文件 rawsignature.sig 和hexsignature.txt。為了檢查簽名的工作情況和公鑰是否正確讀取,可以用帶簽名文件的VerifySignature類(java VerifySignature public_raw.txt data.txt rawsignature.sig),其簽名文件則由SignFile類創(chuàng)建。
  文中提到的代碼可以從以下地址下載:
  GenerateRSAKeys.java
  RawRSAKey.java
  SignFile.java
  VerifySignature.java
  保存密鑰的其他方式
  以上談到的Java類演示了把RSA密鑰寫入磁盤然后讀取磁盤數(shù)據(jù)再造密鑰的方法。你可以通過(guò)Java安全類采用其他替代性的密鑰保存方法。比如你可以采用KeyStore以安全的密碼保護(hù)文件方式保存密鑰。當(dāng)然,采用KeyStore并不能同其他應(yīng)用程序共享密鑰除非它們也是用Java編寫的。另外還有一種共享密鑰數(shù)據(jù)的可能方式,這就是采用X509證書之類的標(biāo)準(zhǔn)編碼機(jī)制。有了Java安全和加密包所提供的類和接口,所有這些方法都令密鑰操作目的的實(shí)現(xiàn)成為可能。
  
  文章連接情況請(qǐng)點(diǎn) ZDNET

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌拉特中旗| 区。| 广元市| 同江市| 赫章县| 日喀则市| 九龙城区| 尖扎县| 湟源县| 于田县| 萨迦县| 始兴县| 正镶白旗| 鄂温| 石家庄市| 若尔盖县| 新巴尔虎右旗| 南澳县| 安乡县| 西昌市| 塔城市| 武邑县| 尖扎县| 安顺市| 阳原县| 丰城市| 喀喇| 九寨沟县| 巴塘县| 盱眙县| 农安县| 华坪县| 河南省| 霍城县| 临江市| 高要市| 济源市| 新化县| 濮阳县| 鸡西市| 鸡东县|