jks讀取密鑰


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;

jks讀取密鑰public class JKSTesting {
 public static PublicKey getPublicKey(String keyStoreFile,
jks讀取密鑰   String storeFilePass, String keyAlias) {

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

  // 公鑰類所對應的類
  PublicKey pubkey = null;
jks讀取密鑰  try {

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

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

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

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

jks讀取密鑰 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());
 }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM