Saltar al contenido

Trucos para guardar información en tu Android

En el día de hoy queremos ofrecerles una serie de trucos para guardar información en Android.

Actualmente, la seguridad de nuestros smartphones es uno de los aspectos más importantes tanto para los usuarios como para los desarrolladores, por este motivo es que algunas compañías, como es el caso de Google han estado trabajando en este asunto en los últimos años. Más específicamente, lo más relevante es el almacenamiento de la información importante en nuestros smartphones.

Trucos para guardar información en tu Android

En este aspecto podemos mencionar a Android Keystore, se trata de un sistema de almacenamiento de credenciales seguros a nivel de sistema operativo. Lo que nos permite es crear algunas claves privadas y públicas para emplearlas en el encriptado de las claves de otras apps.

Con Keystore vamos a disponer de un contenedor para nuestras claves privadas de aplicaciones, incluso, cada app únicamente podrá obtener las claves asociadas a ella misma, y no las de otras aplicaciones.

Es más, la pantalla de bloqueo del usuarios se emplea para encriptar la Keystore, así que si nuestra pantalla se encuentra desbloqueada, la información está fuera del alcance de cualquiera, algo que para los desarrolladores significa que esta información no está al alcance en servicios en segundo plano.

Trucos para guardar información en tu Android

Keystore ya fue incorporado desde los inicios de Android, aunque por entonces restringido a VPN y WiFis.

Si queremos saber cómo funciona este mecanismo, tendremos que aprender a usar la Keystore como programadores. Así que, vamos a tener que conseguir una referencia a la Keystore que inicializamos:

Keystore.getInstance("AndroidKeyStore");
keystore.load(null)

Luego vamos a poder listar las claves, para lo cual podríamos seguir este método:

private void refreshKeys() {
        keyAliases = new ArrayList<>();
        try {
            Enumeration<String> aliases = keyStore.aliases();
            while (aliases.hasMoreElements()) {
                keyAliases.add(aliases.nextElement());
            }
        }
        catch(Exception e) {}

        if(listAdapter != null)
            listAdapter.notifyDataSetChanged();
}

También podemos incorporar nuevas claves con KeyPairGenerator de esta manera:

    public void createNewKeys(View view) {
        String alias = aliasText.getText().toString();
        try {
            // Create new key if needed
            if (!keyStore.containsAlias(alias)) {
                Calendar start = Calendar.getInstance();
                Calendar end = Calendar.getInstance();
                end.add(Calendar.YEAR, 1);
                KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(this)
                        .setAlias(alias)
                        .setSubject(new X500Principal("CN=Sample Name, O=Android Authority"))
                        .setSerialNumber(BigInteger.ONE)
                        .setStartDate(start.getTime())
                        .setEndDate(end.getTime())
                        .build();
                KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
                generator.initialize(spec);

                KeyPair keyPair = generator.generateKeyPair();
            }
        } catch (Exception e) {
            Toast.makeText(this, "Exception " + e.getMessage() + " occured", Toast.LENGTH_LONG).show();
            Log.e(TAG, Log.getStackTraceString(e));
        }
        refreshKeys();
    }

Si usamos el método deleteEntry podremos eliminar cualquiera de las claves e incluso encriptar y desencriptar texto utilizando la clave pública.

Sin dudas esta es la mejor manera de guardar información en Android, así que no dejen de usarla.