2011-04-18 15 views
6

Quiero almacenar datos seguros en un almacén de claves. Por lo tanto usoAndroid Keystore ¿Cuál debo elegir?

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

pero Android parece no saber "JCEKS".

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

Trying JKS da el mismo error. ¿Qué algoritmo es bueno para usarlo en Android?

Respuesta

9

Android parece estar utilizando el proveedor de bouncycastle. Este es el proveedor predeterminado que devuelve la API. Para asegurarse de cuál está disponible como predeterminado en el dispositivo, use KeyStore.getDefaultType().

En mi caso esto devolvió 'BKS'. También parece haber una excepción cuando hay un '.' carácter en la ruta del archivo del almacén de claves.

cuando almacené la tienda en una carpeta con el nombre de mi paquete (como se recomienda en la documentación de Android), se produjo una excepción.

También le recomendamos comprobar this.

3

¿Ha cargado el almacén de claves antes de intentar acceder? ¿Ocurrió el mensaje de error justo en la instrucción getInstance?

Algunos google han dicho que "PKCS12" funcionó para algunas personas, échale un vistazo.

2

Necesita la tienda clave de castillo hinchable (BKS). Echa un vistazo here

2

uso es KeyStore keyStore = KeyStore.getInstance("PKCS12");

Crear almacén de claves con la función "KeyTools Explorer"!

0

Esto funcionó para mí:

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

recuerde llamar KeyStore.load(KeyStore.LoadStoreParameter param) antes de llamar a KeyStore.getEntry (String alias, KeyStore.ProtectionParameter param), es decir

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

Esto podría ayudar:

ver 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 
Cuestiones relacionadas