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

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

JavaSE 6基于JSR105的XML簽名之實踐篇

2019-11-18 15:31:21
字體:
來源:轉載
供稿:網友

  在上篇(【理論篇】)中,我們分析了有關基于JSR-105進行xml簽名的基本概念。在本篇中,我們開始分析一個實際的XML簽名示例應用程序。

  一、 密碼學密鑰和證書

  現在,我們已經預備好我們的XML簽名示例應用程序。

  讓我們首先分析下列XML文檔-./etc/invoice.xml:

<?XML version="1.0" encoding="UTF-8" standalone="no"?>
<invoice XMLns="http://www.company.com/accounting">
<items>
 <item>
  <desc>Applied Cryptography</desc>
  <type>book</type>
  <unitPRice>44.50</unitprice>
  <quantity>1</quantity>
 </item>
</items>
<creditcard>
 <number>123456789</number>
 <eXPiry>10/20/2009</expiry>
 <lastname>John</lastname>
 <firstname>Smith</firstname>
</creditcard>
</invoice>
  我們計劃使用一個XML簽名對它進行簽名并且希望使用一個基于一個公共密鑰的簽名方法。

  讓我們先生成密碼學密鑰。為此,我們可以使用JDK中提供的keytool工具-把該程序移動到./etc文件夾下,并且執行下列命令:

keytool -genkey -keysize 512 -sigalg DSA -dname "cn=Young Yang, ou=Architecture, o=Company, L=New York, ST=NY, c=US" -alias biz -keypass kp1234 -keystore bizkeystore -storepass sp1234 -validity 180
  這個命令能夠創建密鑰并預以存儲-名字為bizkeystore,存儲在工作目錄./etc下,并且指定它的口令為sp1234。它還生成一個針對實體(它包含有一個卓著的名字-Young Yang)的公有/私有密鑰對。【注重】,這里使用DSA密鑰生成算法來創建公有/私有密鑰-都為512位長。
上面的命令進一步創建了一個自簽名的證書,這是使用SHA1的DSA算法(JSR-105注釋中的DSA_SHA1,其中包括了公共密鑰和前面那個卓聞名字信息)實現的。這個證書將保持180天的有效期并且關聯與一個密鑰存儲文件(此處引用的別名為"biz")中的私有密鑰。該私有密鑰被賦予口令kp1234。

  我們的示例中包括一個簡單的java類-KeyStoreInfo,用于把存儲于前面的密鑰存儲文件中的密鑰和證書信息輸出到System.out;這個類也用于應用程序從中取得密鑰對-這里的私有和公共密鑰匹配作為輸入參數指定的條件。為了試驗它能夠輸出包含在前面存儲文件bizkeystore中的信息,讀者可以運行Ant目標ksInfo。

  下列代碼片斷顯示KeyStoreInfo中的用來檢索一個KeyPair的方法:

public static KeyPair getKeyPair(String store,String sPass,String kPass,String alias)
throws CertificateException,
IOException,
UnrecoverableKeyException,
KeyStoreException,
NoSUChAlgorithmException{
 KeyStore ks = loadKeyStore(store,sPass);
 KeyPair keyPair = null;
 Key key = null;
 PublicKey publicKey = null;
 PrivateKey privateKey = null;
 if (ks.containsAlias(alias)){
  key = ks.getKey(alias,kPass.toCharArray());
  if (key instanceof PrivateKey){
   Certificate cert = ks.getCertificate(alias);
   publicKey = cert.getPublicKey();
   privateKey = (PrivateKey)key;
   return new KeyPair(publicKey,privateKey);
  }else{
   return null;
  }
 } else {
  return null;
 }
}
  借助于一個KeyPair,我們可以輕易地得到PrivateKey和PublicKey-通過調用相應的操作getPrivate()和getPublic()實現。

  為了從KeyStore中得到一個PublicKey,我們并不真正需要在上面的方法中所要求的密鑰口令,而這正是下列方法所實現的:



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴安县| 隆回县| 杭州市| 新巴尔虎右旗| 连山| 清水县| 黎城县| 高碑店市| 盈江县| 嘉义县| 揭东县| 同心县| 百色市| 英德市| 沙坪坝区| 扶绥县| 金堂县| 修文县| 吴江市| 沙田区| 长宁县| 逊克县| 彭阳县| 玉溪市| 湄潭县| 安岳县| 米脂县| 馆陶县| 宝丰县| 郓城县| 汝南县| 大田县| 沛县| 六安市| 玉龙| 佳木斯市| 盐津县| 襄汾县| 龙泉市| 丹江口市| 甘南县|