Cómo agregar cifrado AES a tus aplicaciones móviles para proteger los datos del usuario

Recientemente ha habido una avalancha de titulares de noticias sobre aplicaciones móviles y preocupaciones de privacidad. No estoy argumentando que algunas de estas preocupaciones sean justificadas, pero para aquellos de nosotros que intentamos ser transparentes con los clientes y hacer lo correcto, ahora más que nunca es el momento de poner un esfuerzo extra cuando se trata de asegurar los datos.

Índice de Contenido
  1. Asegurando tus archivos de preferencias compartidas
  2. Crear un nuevo proyecto en Eclipse
  3. Funciones de utilidad para el cifrado y descifrado
    1. Función getKey()
    2. Función encrypt()
    3. Función decrypt()
  4. Utilizando las facilidades de cifrado

Asegurando tus archivos de preferencias compartidas

En junio de 2011, escribí un blog que demostraba cómo agregar seguridad a los archivos de preferencias compartidas en Android. El tutorial estaba destinado a principiantes y, en el espíritu de mantenerlo simple, pasé por alto las rutinas de cifrado. Al final del día, la teoría era sólida, pero el algoritmo de seguridad en sí era un poco deficiente.

Con ese enfoque en mente, he escrito un tutorial rápido sobre cómo agregar cifrado de nivel Advanced Encryption Standard (AES) a tus aplicaciones. Desde 2003, ciertas variaciones de AES han sido aprobadas por la Agencia de Seguridad Nacional para proteger documentos electrónicos de alto secreto.

Crear un nuevo proyecto en Eclipse

Para comenzar a crear tu propia versión digital de Fort Knox, puedes descargar el proyecto completo o seguir los pasos a continuación:

  1. Crea un nuevo proyecto en Eclipse. Si bien es posible implementar AES en versiones de Android tan tempranas como la 1.0, mi implementación particular utiliza la clase de utilidad Base64, que no se introdujo oficialmente hasta Android 2.2. Por lo tanto, estaremos apuntando a SDK 8.0 o superior. No olvides cambiar el nombre de tu actividad principal a Main.java.
  2. En la carpeta /res/layout, definiremos nuestro diseño XML. Para este demo, necesitamos algunos text views y un linear layout estándar.
  3. Podemos pasar a nuestro archivo /src/Main.java. Para comenzar, importaremos varios paquetes de seguridad estándar de Java.

Funciones de utilidad para el cifrado y descifrado

A continuación, agregaremos tres funciones de utilidad para manejar la codificación y decodificación:

Función getKey()

private byte[] getKey() {
  byte[] seed = "aqui_esta_tu_clave_AES".getBytes();
  KeyGenerator kg;

  try {
    kg = KeyGenerator.getInstance("AES");
  } catch (NoSuchAlgorithmException e) {
    return null;
  }

  SecureRandom sr;

  try {
    sr = SecureRandom.getInstance("SHA1PRNG");
  } catch (NoSuchAlgorithmException e) {
    return null;
  }

  sr.setSeed(seed);
  kg.init(128, sr);
  SecretKey sk = kg.generateKey();
  byte[] key = sk.getEncoded();
  return key;
}

Función encrypt()

private String encrypt(String clearText) {
  byte[] encryptedText = null;

  try {
    SecretKeySpec ks = new SecretKeySpec(getKey(), "AES");
    Cipher c = Cipher.getInstance("AES");
    c.init(Cipher.ENCRYPT_MODE, ks);
    encryptedText = c.doFinal(clearText.getBytes("UTF-8"));
    return Base64.encodeToString(encryptedText, Base64.DEFAULT);
  } catch (Exception e) {
    return null;
  }
}

Función decrypt()

private String decrypt(String encryptedText) {
  byte[] clearText = null;

  try {
    SecretKeySpec ks = new SecretKeySpec(getKey(), "AES");
    Cipher c = Cipher.getInstance("AES");
    c.init(Cipher.DECRYPT_MODE, ks);
    clearText = c.doFinal(Base64.decode(encryptedText, Base64.DEFAULT));
    return new String(clearText, "UTF-8");
  } catch (Exception e) {
    return null;
  }
}

Utilizando las facilidades de cifrado

Solo necesitamos sobrescribir la función onCreate() y utilizar las facilidades de cifrado:

Cómo garantizar la validación local de los clientes en un dominio multi-sitio
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  String s = "Este es mi dato que quiero mantener seguro.";
  String encryptedText = encrypt(s);
  String clearText = decrypt(encryptedText);

  ((TextView)findViewById(R.id.encrypted_text)).setText(encryptedText);
  ((TextView)findViewById(R.id.clear_text)).setText(clearText);
}

Ahora tienes en tus manos un cifrado de clase mundial. No pretendo entender las complejas matemáticas involucradas en los algoritmos de cifrado, por el contrario, aprecio el hecho de que no tengo que preocuparme por todos los detalles del algoritmo de cifrado.

Google y la comunidad de Java han proporcionado a los desarrolladores una gran cantidad de herramientas para ayudar a mantener los datos privados de los usuarios en privado. Los desarrolladores deben asumir un papel más activo en la lucha por la privacidad del usuario. Después de todo, aquellos de nosotros que ganamos nuestra vida desarrollando aplicaciones para smartphones tenemos un interés personal en crear un ecosistema digital basado en la confianza y la comprensión mutua.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Redes, allí encontraras muchos artículos similares a Cómo agregar cifrado AES a tus aplicaciones móviles para proteger los datos del usuario , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.