• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • JavaSE 6基于JSR105的XML簽名之實踐篇

    發表于:2007-04-27來源:作者:點擊數: 標簽:實踐xmlJavaSEJSR105簽名
    在 上篇(【理論篇】) 中,我們分析了有關基于JSR-105進行XML簽名的基本概念。在本篇中,我們開始分析一個實際的XML簽名示例應用程序。 一、 密碼學密鑰和證書 現在,我們已經準備好我們的XML簽名示例應用程序。 讓我們首先分析下列XML文檔-./etc/invoice.x
      在上篇(【理論篇】)中,我們分析了有關基于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>
    ?。糹tem>
     ?。糳esc>Applied Cryptography</desc>
     ?。紅ype>book</type>
     ?。紆nitprice>44.50</unitprice>
     ?。紂uantity>1</quantity>
    ?。?item>
    </items>
    <creditcard>
    ?。糿umber>123456789</number>
    ?。糴xpiry>10/20/2009</expiry>
    ?。糽astname>John</lastname>
    ?。糵irstname>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,我們并不真正需要在上面的方法中所要求的密鑰口令,而這正是下列方法所實現的:

    public static PublicKey getPublicKey(String store,
    String sPass, String alias)
    throws KeyStoreException,
    NoSuchAlgorithmException,
    CertificateException,
    IOException{
     KeyStore ks = loadKeyStore(store, sPass);
     Certificate cert = ks.getCertificate(alias);
     return cert.getPublicKey();
    }

      在上面兩部分代碼片斷中,方法KeyStore loadKeyStore(String store,String sPass)是一個工具函數,用于實例化一個KeyStore對象,并且從文件系統加載入口。我們以如下方式實現它:

    private static KeyStore loadKeyStore(String store, String sPass)
    throws KeyStoreException,
    NoSuchAlgorithmException,
    CertificateException,
    IOException{
     KeyStore myKS = KeyStore.getInstance("JKS");
     FileInputStream fis = new FileInputStream(store);
     myKS.load(fis,sPass.toCharArray());
     fis.close();
     return myKS;
    }

      伴隨JDK提供的keytool還可以把存儲在一個密鑰儲存文件內的證書輸出到系統文件中。例如,為了創建一個包含X509證書(關聯于別名為biz的密鑰入口)的biz.cer文件,我們可以從文件夾./etcdirectory下運行下列命令:

    keytool -export -alias biz -file biz.cer -keystore bizkeystore -storepass sp1234

      這個證書實現認證我們討論上面的公共密鑰。

      我們還在示例中包括了一個Java類-CertificateInfo,用于把一個證書中的一些有趣的信息輸出到System.out。為了試驗這一點,讀者可以運行Ant目標certInfo。然而,要理解該代碼及其輸出,必須具有DSA和RSA算法的基本知識。當然,讀者可以安全地繞過這個程序而繼續閱讀本文后面的內容。

    共6頁。 1 2 3 4 5 6 :

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    ...
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>