The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(11)

          我參與的團隊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          JKS文件是一個java中的密鑰管理庫,里面可以放各種密鑰文件,JKS文件的生成這里暫且不說,這里主要是關注如何從JKS文件中將已有的密鑰讀取出來。

           

          下面是兩個java讀取JKS文件中密鑰的方法

          當然在看懂下面兩個方法之前要對JKS文件的結構有所了解:

          JKS文件就好像一個倉庫,里面可以放很多的東西,這里只存放一類東西就是密鑰,倉庫當然會有一把鎖,防范別人隨便亂拿,這個就是JKS文件的密碼。里面存放的密鑰也各有不同,每個密鑰都有一個名字(在下面叫別名),一類就密鑰對,一類叫公鑰,一類叫私鑰,密鑰對就是包含公鑰和私鑰的。這里的公鑰只要你能進入倉庫你就可以隨便查看拿走,私鑰則是有密碼的,只允許有權限的人查看拿走。所以在下面讀取密鑰時也就有點細微的不同之處,對于讀取公鑰只需要知道JKS文件(倉庫)的密碼就可以了,但是在讀取私鑰時則必須有私鑰的密碼也就是你必須要有權限,在下面你會發現,在讀取私鑰時多了一個參數,對應的就是私鑰的密碼。




          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.IOException;
          import java.security.KeyStore;
          import java.security.KeyStoreException;
          import java.security.NoSuchAlgorithmException;
          import java.security.PrivateKey;
          import java.security.PublicKey;
          import java.security.UnrecoverableKeyException;
          import java.security.cert.CertificateException;

          import javax.security.cert.Certificate;

          public class JKSTesting {
           
          public static PublicKey getPublicKey(String keyStoreFile,
             String storeFilePass, String keyAlias) 
          {

            
          // 讀取密鑰是所要用到的工具類
            KeyStore ks;

            
          // 公鑰類所對應的類
            PublicKey pubkey = null;
            
          try {

             
          // 得到實例對象
             ks = KeyStore.getInstance("JKS");
             FileInputStream fin;
             
          try {

              
          // 讀取JKS文件
              fin = new FileInputStream(keyStoreFile);
              
          try {
               
          // 讀取公鑰
               ks.load(fin, storeFilePass.toCharArray());
               java.security.cert.Certificate cert 
          = ks
                 .getCertificate(keyAlias);
               pubkey 
          = cert.getPublicKey();
              }
           catch (NoSuchAlgorithmException e) {
               e.printStackTrace();
              }
           catch (CertificateException e) {
               e.printStackTrace();
              }
           catch (IOException e) {
               e.printStackTrace();
              }

             }
           catch (FileNotFoundException e) {
              e.printStackTrace();
             }

            }
           catch (KeyStoreException e) {
             e.printStackTrace();
            }

            
          return pubkey;
           }


           
          /**
            * 得到私鑰
            * 
            * 
          @param keyStoreFile
            *            私鑰文件
            * 
          @param storeFilePass
            *            私鑰文件的密碼
            * 
          @param keyAlias
            *            別名
            * 
          @param keyAliasPass
            *            密碼
            * 
          @return
            
          */

           
          public static PrivateKey getPrivateKey(String keyStoreFile,
             String storeFilePass, String keyAlias, String keyAliasPass) 
          {
            KeyStore ks;
            PrivateKey prikey 
          = null;
            
          try {
             ks 
          = KeyStore.getInstance("JKS");
             FileInputStream fin;
             
          try {
              fin 
          = new FileInputStream(keyStoreFile);
              
          try {
               
          try {
                ks.load(fin, storeFilePass.toCharArray());
                
          // 先打開文件
                prikey = (PrivateKey) ks.getKey(keyAlias, keyAliasPass
                  .toCharArray());
                
          // 通過別名和密碼得到私鑰
               }
           catch (UnrecoverableKeyException e) {
                e.printStackTrace();
               }
           catch (CertificateException e) {
                e.printStackTrace();
               }
           catch (IOException e) {
                e.printStackTrace();
               }

              }
           catch (NoSuchAlgorithmException e) {
               e.printStackTrace();
              }

             }
           catch (FileNotFoundException e) {
              e.printStackTrace();
             }

            }
           catch (KeyStoreException e) {
             e.printStackTrace();
            }

            
          return prikey;
           }


           
          public static void main(String[] args) {
            PublicKey publicKey;
            PrivateKey privateKey;
            
            publicKey
          =getPublicKey("C:\\aaa.jks","AAAAAAAA""ibmwebspheremq");
            privateKey
          =getPrivateKey("C:\\aaa.jks","AAAAAAAA""ibmwebspheremq","AAAAAAAA");
            
            System.out.println(publicKey.toString());
            System.out.println(privateKey.toString());
           }

          }



           

          posted on 2011-11-24 11:36 Eric_jiang 閱讀(7930) 評論(0)  編輯  收藏 所屬分類: WebShpere
          主站蜘蛛池模板: 凭祥市| 双辽市| 黎川县| 石林| 西乡县| 佳木斯市| 交口县| 安化县| 北辰区| 西丰县| 岗巴县| 福建省| 交口县| 丹阳市| 东兰县| 察雅县| 朝阳区| 石柱| 同德县| 宁蒗| 赤水市| 苍梧县| 乌兰县| 云阳县| 重庆市| 萍乡市| 安溪县| 桓仁| 海淀区| 西林县| 图们市| 平度市| 彰化县| 黄龙县| 吴川市| 宣武区| 乌拉特后旗| 资兴市| 营山县| 沙雅县| 旬邑县|