2013-08-22 86 views
0

我使用下面的代碼來顯示與我的密鑰庫證書關聯的別名,並且它工作正常,現在可以如何顯示別名passowrd?有沒有這方面的任何方法。顯示來自密鑰庫證書的別名密碼

public class keyaliasfinder { 

    public static void main(String args[]) 
    { 
     FileInputStream is = null; 
     try { 

      File file = new File("c:\\my_keystore"); 
      is = new FileInputStream(file); 
      KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
      String password = "FnvUKHdr6b4343dfdf"; 
      keystore.load(is, password.toCharArray()); 

      PrivateKey p=new PrivateKey() { 

       @Override 
       public String getFormat() { 
        // TODO Auto-generated method stub 
        return null; 
       } 

       @Override 
       public byte[] getEncoded() { 
        // TODO Auto-generated method stub 
        return null; 
       } 

       @Override 
       public String getAlgorithm() { 
        // TODO Auto-generated method stub 
        return null; 
       } 
      }; 


      Enumeration enumeration = keystore.aliases(); 
      while(enumeration.hasMoreElements()) { 
       String alias = (String)enumeration.nextElement(); 
       System.out.println("alias name: " + alias); 
       Certificate certificate = keystore.getCertificate(alias); 
       System.out.println(certificate.toString()); 

      } 

     } catch (java.security.cert.CertificateException e) { 
      e.printStackTrace(); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (KeyStoreException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }finally { 
      if(null != is) 
       try { 
        is.close(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
     } 
    } 
} 
+0

的密碼,必須提供用於讀取密鑰存儲的私鑰。你必須知道它。它不存儲在密鑰存儲區中。 – Robert

+0

@Robert,但我在哪裏提到這個密碼是你在談論已經存在的密鑰庫密碼。 – Prateek

+0

@Robert當然它存儲在KeyStore中。但是,當然沒有API來檢索它。否則,KeyStore API將不安全。 – EJP

回答

0

我對你的問題有點困惑。如果您嘗試恢復別名密碼,則密碼不會以明文密碼的形式存在。密碼用於通過基於密碼的衍生功能生成加密密鑰,該密鑰用於保護您的私鑰。但是,如果您正在尋找一個API來傳遞別名密碼,那麼一旦您使用密鑰存儲庫密碼加載密鑰存儲庫(這就是您所做的),您可以按照以下方式傳遞別名密碼。

Key privateKey = keystore.getKey(String alias, char[] aliasPassword) 

KeyStore.ProtectionParameter protParam = new KeyStore.PasswordProtection(aliasPassword); 

//Get my private key 
KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry)ks.getEntry("privateKeyAlias", protParam); 
PrivateKey myPrivateKey = pkEntry.getPrivateKey(); 
+0

我試圖重新取回別名密碼,因爲您提到的密碼不存在作爲明文密碼相同的密碼是否有任何解決方法或破解它和什麼是需要它的數據回來 – Prateek