2011-04-18 79 views
6

我想將安全數據存儲在密鑰庫中。 所以我用Android Keystore類型我應該選擇哪一種?

KeyStore store = KeyStore.getInstance("JCEKS"); 

但是Android似乎不知道 「JCEKS」。

04-18 10:52:17.236: WARN/System.err(474): java.security.KeyStoreException: KeyStore JCEKS implementation not found 

Trying JKS給出了同樣的錯誤。 什麼算法很好用它在android上?

回答

9

Android似乎在使用bouncycastle提供程序。這是api返回的默認提供者。要確定設備上默認使用哪一個,請使用KeyStore.getDefaultType()

在我的情況下,這返回'BKS'。也有似乎有一個例外,當有一個'。'密鑰庫文件路徑中的字符。

當我將商店存儲到包含我的包名稱的文件夾中時(如Android文檔中的建議),它導致出現異常。

你也可以檢查this也。

3

您是否在嘗試訪問密鑰庫之前加載密鑰庫?錯誤消息是否發生在getInstance指令中?

一些谷歌搜索引擎說,「PKCS12」爲少數人工作,給它一個去。

2

您需要充氣城堡鑰匙店(BKS)。 看一看here

2

使用它的KeyStore keyStore = KeyStore.getInstance("PKCS12");

與工具使用 「KeyTools資源管理器」 創建密鑰庫!

0

這爲我工作:

KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore"); 

記住調用KeyStore.getEntry (String alias, KeyStore.ProtectionParameter param)之前調用KeyStore.load(KeyStore.LoadStoreParameter param),即

keyStore.load(null); 
KeyStore.Entry keyStoreEntry = keyStore.getEntry(alias, null); 
0

這可能幫助:

看到https://github.com/nelenkov/ecdh-kx/blob/master/src/org/nick/ecdhkx/Crypto.java

static public void listAlgorithms(String algFilter){ 
    java.security.Provider[] providers = java.security.Security.getProviders(); 
    for (java.security.Provider p : providers){ 
     String providerStr = String.format("%s/%s/%f\n", p.getName(), p.getInfo(), 
              p.getVersion()); 
     mLog.debug(providerStr); 
     Set<Service> services = p.getServices(); 
     List<String> algs = new ArrayList<>(); 
     for (Service s : services){ 
      boolean match = true; 
      if (algFilter != null){ 
       match = s.getAlgorithm().toLowerCase().contains(algFilter.toLowerCase()); 
      } 

      if (match){ 
       String algStr = String.format("\t%s/%s/%s", s.getType(), 
               s.getAlgorithm(), s.getClassName()); 
       algs.add(algStr); 
      } 
     } 

     Collections.sort(algs); 
     for (String alg : algs) mLog.debug("\t" + alg); 
     mLog.debug(""); 
    } 
}//listAlgorithms 
相關問題