2013-08-22 62 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