Uso de Android NDK para el cifrado de datos pasados ​​de la aplicación normal de Android

¿Es posible y vale la pena tratar de desarrollar alguna aplicación de servidor utilizando android NDK que cifrar los datos (o simplemente utilizar algunos construido en la biblioteca de cifrado de Linux) pasó a ella desde la aplicación normal basada en Java?

Intenté usar la biblioteca de cifrado, pero tomó casi un minuto para cifrar el archivo de 2MB con AES. Y blowfish no está disponible en Cipher hasta Android 2.3 (?). Y dudo que sea mucho más rápido.

Yo estaba usando blowfish para el cifrado en Symbian y fue mucho más rápido (menos de 5-10 segundos), así que creo que en Android es más lento debido a la utilización de la máquina virtual Java y me gustaría probar la aplicación nativa para él.

¿Alguien lo ha hecho antes?

EDIT: El cifrado en NDK es mucho más rápido. Hazlo allí. Hay una pregunta similar con la misma respuesta para AES: Descifrado AES en Android demasiado lento para ser utilizable. ¿NDK será más rápido? ¿Otras ideas?

¿Qué versión de Android está probando? Tenga en cuenta que a partir de Froyo, hay un JIT de rastreo que debería funcionar bastante bien para los bucles intensivos en matemáticas en una biblioteca criptográfica.

Para las versiones anteriores, es probable que desee hacerlo con el NDK, sí. No sé por qué usted necesita un servidor, sin embargo – simplemente compilar cualquier buena / rápida biblioteca de criptografía y hacer un envoltorio a su alrededor con el NDK. Entonces, simplemente puede usar el contenedor de su aplicación basada en java.

BouncyCastle en Android 2.2 es horriblemente lento con AES / CBC / PKCS5 mientras se utiliza el descifrado de secuencia. La CPU va a 100% y el rendimiento es 5kb / seg.

Usando Chilkat es magnitudes más rápido y mantiene el uso de la CPU bajo (incluso en el Emulador). Pero Chilkat no está ofreciendo un InputStream para manejar el descifrado de secuencia y está almacenando en búfer todos los bytes cifrados internamente (hasta que ocurre un error de espacio de montón). Por lo tanto, debe administrar la descodificación de secuencia (por ejemplo, inicializando chilkat para cada bloque …)

Para responder a su pregunta, sí que probablemente podría escribir algo que se ejecutaría con el NDK, pero no veo por qué lo necesitaría.

Si sólo desea cifrar los datos que entran en el almacenamiento de SQL, puede consultar SQLCipher ( https://guardianproject.info/code/sqlcipher/ )

También puede intentar usar algunas bibliotecas de castillos hinchables ( http://www.bouncycastle.org/java.html ). Pueden ser más rápidos que los construidos en android o pueden tener una biblioteca blowfish que puede utilizar.

Esto no es de código abierto, pero el punto de vista de rendimiento Chillkat lo mejor que he encontrado.

Por supuesto, es posible utilizar la biblioteca externa para hacer criptografía. Puede utilizar openssl por ejemplo https://github.com/guardianproject/openssl-android . La única pregunta es cuán grande será el impacto de la capa JNI que existe entre Java y el código C. Si necesita pasar mucho de la fecha a C y volver a continuación, el beneficio de tener biblioteca nativa podría ser negado por la capa de JNI. Sería mucho mejor para mover más funcionalidad de Java a C de una manera que los datos que deben ser cifrados podrían ser procesados ​​en C sólo. Por ejemplo, la pila de red y el cifrado podrían estar en C mientras que la interfaz de usuario en Java. Esto es sólo una propuesta que debe saber mejor si esto es posible o no.

  • Cómo cifrar valores de sesión en Android
  • Cifrado entre Android y C #
  • Encriptación AES 128 en Java Descifrado en PHP
  • Cómo manejar "último bloque incompleto en desencriptación"
  • Error de descifrado: Bloqueo de pad dañado
  • ¿Cuál es el estado actual del cifrado de la aplicación de Android?
  • RSA Encrypt and Decrypt Strings en Android
  • Preguntas sobre el cifrado de activos de aplicaciones de Google Play
  • ¿Por qué el descifrado de AES java devuelve caracteres adicionales?
  • Último bloque incompleto con CipherInputStream / CipherOutputStream, incluso con relleno AES / CBC / PKCS5Padding
  • Cifrado de cadena de Java
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.