从JKS文件中读取密钥

    xiaoxiao2022-06-29  47

    from  http://blog.csdn.net/wo1017/article/details/6582492

    从JKS文件中读取密钥

    JKS文件是一个Java中的密钥管理库,里面可以放各种密钥文件,JKS文件的生成这里暂且不说,这里主要是关注如何从JKS文件中将已有的密钥读取出来。

     

    下面是两个java读取JKS文件中密钥的方法

    当然在看懂下面两个方法之前要对JKS文件的结构有所了解:

    JKS文件就好像一个仓库,里面可以放很多的东西,这里只存放一类东西就是密钥,仓库当然会有一把锁,防范别人随便乱拿,这个就是JKS文件的密码。里面存放的密钥也各有不同,每个密钥都有一个名字(在下面叫别名),一类就密钥对,一类叫公钥,一类叫私钥,密钥对就是包含公钥和私钥的。这里的公钥只要你能进入仓库你就可以随便查看拿走,私钥则是有密码的,只允许有权限的人查看拿走。所以在下面读取密钥时也就有点细微的不同之处,对于读取公钥只需要知道JKS文件(仓库)的密码就可以了,但是在读取私钥时则必须有私钥的密码也就是你必须要有权限,在下面你会发现,在读取私钥时多了一个参数,对应的就是私钥的密码。

     

    /**   * 得到公钥   *    * @param keyStoreFile   *            公钥文件名   * @param storeFilePass   *            公钥文件的PASS   * @param keyAlias   *            公钥别名   * @return 公钥   */  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());          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;  }

    转载请注明原文地址: https://ju.6miu.com/read-1125317.html

    最新回复(0)