2011-04-18 43 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 
相关问题