【问题标题】:Android Keystore Type which one should I choose?Android Keystore Type 我应该选择哪一种?
【发布时间】:2011-04-18 09:10:17
【问题描述】:

我想将安全数据存储在密钥库中。 因此我使用

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

尝试 JKS 会出现同样的错误。 在android上用什么算法好?

【问题讨论】:

    标签: android security keystore


    【解决方案1】:

    Android 似乎正在使用 bouncycastle 提供程序。这是 api 返回的默认提供程序。要确定哪一个在设备上默认可用,请使用KeyStore.getDefaultType()

    在我的情况下,这返回了“BKS”。当有一个“。”时,似乎也有一个例外。密钥库文件路径中的字符。

    当我将商店存储到一个以我的包名称命名的文件夹中时(如 Android 文档中所建议的那样),它导致了异常。

    您也可以查看this

    【讨论】:

      【解决方案2】:

      您是否在尝试访问之前加载了密钥库?错误消息是否发生在 getInstance 指令处?

      一些谷歌搜索说“PKCS12”适用于少数人,试一试。

      【讨论】:

        【解决方案3】:

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

        使用“KeyTools Explorer”工具创建密钥库!

        【讨论】:

          【解决方案4】:

          您需要充气城堡钥匙库 (BKS)。 看看here

          【讨论】:

            【解决方案5】:

            这对我有用:

            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);
            

            【讨论】:

              【解决方案6】:

              这可能会有所帮助:

              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
              

              【讨论】:

                猜你喜欢
                • 2012-01-25
                • 1970-01-01
                • 2010-11-05
                • 2016-03-17
                • 1970-01-01
                • 2013-11-12
                • 2021-08-18
                • 1970-01-01
                • 2010-10-22
                相关资源
                最近更新 更多