studio encriptar desencriptar datos contraseƱa archivos android encryption oauth sharedpreferences

android - desencriptar - encriptar datos en SharedPreferences



encriptar y desencriptar datos en java (10)

Actualmente estoy desarrollando un marco para el acceso de OAuth 1 y 2 a los servicios web y mi pregunta es, ¿cómo almaceno datos confidenciales como una clave de acceso oAuth de una manera segura? El problema con estas claves es que algunas plataformas como Twitter usan una clave permanente y si alguien tiene acceso a esta clave, puede hacer lo que quiera con la cuenta de Twitter de los usuarios.

Entonces, ¿es posible cifrar automáticamente los datos antes de que se almacenen en las preferencias compartidas? ¿O hay una mejor forma / lugar para almacenar datos muy importantes?

ACTUALIZAR: TAMBIÉN LEER: ¿Cuál es la forma más adecuada de almacenar la configuración del usuario en la aplicación de Android?


Deberías echarle un vistazo a Slink . Me di cuenta de que la mayoría de las herramientas de cifrado de Preferencias Compartidas usan encriptación para cada acción que realiza, lo que significa que cada par clave-valor se guarda solo después de que tanto la clave como el valor se hayan cifrado por separado. Esto crea una gran sobrecarga de rendimiento.

Así que busqué una biblioteca que me diera un proceso de encriptación más eficiente y encontré Slink. Slink utiliza la biblioteca Ocultación de Facbook para guardar todo el mapa de objetos en su conjunto, lo que lo convierte en la solución de cifrado de Preferencias Compartidas más eficiente y rápida. También utiliza las interfaces comunes de SharedPreferences de Android, lo que hace que el uso sea extremadamente fácil y casi perfecto. Descargo de responsabilidad: soy parte del equipo de desarrollo que desarrolla esta biblioteca.



Pruebe usar nuestro componente https://github.com/BottleRocketStudios/Android-Vault Vault. Utilizará el Almacén de claves de Android (en dispositivos compatibles) o una técnica de Ofuscación para encriptar valores en un archivo SharedPreference e implementará la interfaz SharedPreference, por lo que se trata en gran parte de un reemplazo directo.


Puede cifrar los datos en las preferencias y mantener la clave de cifrado en el sistema Android Keystore . De esta forma, su clave de encriptación también sería segura.

Puede buscar en una biblioteca haciendo esto https://github.com/ophio/secure-preferences




Yo recomendaría usar Facebook Conceal para cifrado en Android casi todo el tiempo: es una biblioteca rápida de Android que toma decisiones realmente sensatas y te deja con algunas interfaces simples para hacer el trabajo.

¡Prima! Recientemente he reconstruido el rompecabezas de cómo puedes usarlo de Xamarin; mira mi artículo sobre cómo proteger los datos de tu aplicación C usando ocultación para obtener más información.



Este artículo en codeproject contiene un buen contenedor para las preferencias compartidas. Sin embargo, el nombre de clase SecurePreferences es engañoso, algo así como SecurePreferences sería más apropiado.


1). ¿Cómo encriptar?

En Android, el cifrado se realiza a través de Java Criptography Architecture (JCA). Principalmente es el paquete javax.crypto.* .

Guía de referencia JCA

Aquí hay un example del uso de API JCA (AES alroritmo en particular).

2). Dónde almacenar?

La API de cifrado se manipula con matrices de bytes (no cadenas). Esto significa que puede usar SharedPreferences , pero deberá aplicar la codificación Base-64 en la matriz de bytes cifrados antes de colocarla en SharedPreferences (de lo contrario, el analizador XML no podrá leer el archivo de preferencias compartidas). Luego, para leer necesitará usar la decodificación Base-64. Tenga en cuenta que, de forma predeterminada, la mayoría de las versiones del sistema operativo Android no tienen una API Base-64 incorporada (consulte la sección ACTUALIZACIÓN). Por lo tanto, para eliminar esta sobrecarga Base-64 recomendaría simplemente almacenar sus bytes en un archivo privado .

ACTUALIZACIÓN: desde API Nivel 8, la API tiene android.util.Base64 .