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.
- Cómo cifrar la base de datos Android sqlite?
- ¿Dónde guardamos key / passphrase / salt para el cifrado?
- Cifrado en Android usando el algoritmo RSA con módulo dado y exponente
- ¿Cuáles son las mejores prácticas para usar el cifrado AES en Android?
- Error de cifrado de obtener :: EVP_DecryptFinal_ex: desencriptar mal
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?
- IllegalBlockSizeException al intentar cifrar y descifrar una cadena con AES
- Android: ¿Cómo obtener la encriptación Wifi actual?
- Práctica recomendada para descifrar archivos grandes con menos memoria
- Diferencia de cifrado asimétrica - Android vs Java
- Problema al usar la huella dactilar de Android: IV necesaria al descifrar. Utilice IvParameterSpec o AlgorithmParameters para proporcionarlo
- Cómo puedo reproducir video desde byte en android
- Cifrado con AES-256 y el vector de inicialización
- Cifrar y descifrar con el modo AES ECB 'BadPaddingException' en algunos casos
¿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.
- Detenga el teclado virtual de Android desde la finalización de palabras
- ¿Qué puedo hacer para evitar que Android Studio corrija automáticamente mi registro