Cifrado de Android

Estoy trabajando en una aplicación de Android y necesito usar encriptación para un aspecto de ella. Realmente soy indiferente a qué algoritmo utilizo (AES, DES, RSA, etc.). Soy consciente de que Java tiene un paquete de cifrado, pero no estoy familiarizado con él en absoluto. ¿Alguien puede publicar un ejemplo sobre cómo hacer una función de cifrado / descifrado?

La biblioteca java AES tiene un defecto que permite, en las circunstancias adecuadas, que un oyente descifre los paquetes enviados. Ver Padding Oracle Exploit Tool vs Apache MyFaces .

Dicho esto, revise esta Cuestión AS Java Encryption AES de 256 bits .

Bouncy Castle AES EJEMPLO robado de: http://www.java2s.com/Code/Java/Security/EncryptionanddecryptionwithAESECBPKCS7Padding.htm

 import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class MainClass { public static void main(String[] args) throws Exception { Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); byte[] input = "www.java2s.com".getBytes(); byte[] keyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 }; SecretKeySpec key = new SecretKeySpec(keyBytes, "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC"); System.out.println(new String(input)); // encryption pass cipher.init(Cipher.ENCRYPT_MODE, key); byte[] cipherText = new byte[cipher.getOutputSize(input.length)]; int ctLength = cipher.update(input, 0, input.length, cipherText, 0); ctLength += cipher.doFinal(cipherText, ctLength); System.out.println(new String(cipherText)); System.out.println(ctLength); // decryption pass cipher.init(Cipher.DECRYPT_MODE, key); byte[] plainText = new byte[cipher.getOutputSize(ctLength)]; int ptLength = cipher.update(cipherText, 0, ctLength, plainText, 0); ptLength += cipher.doFinal(plainText, ptLength); System.out.println(new String(plainText)); System.out.println(ptLength); } } 

Mira mi respuesta aquí Cifrado de la base de datos de Android . Contiene 2 archivos que puede incluir en cualquiera de sus aplicaciones que requieren cifrado de almacenamiento de datos.

También verificaría Oculta para ver si se ajusta a tu factura. Tiene una API fácil de usar que abstrae los detalles criptográficos: https://github.com/facebook/conceal/

Teniendo en cuenta la sobrecarga para cifrar y descifrar datos en Android, ideé una biblioteca que se basa únicamente en las bibliotecas nativas de Android y Java para hacer que el proceso sea lo más simple posible.

Para instalar, use el centro de distribución jcenter. En gradle:

compile 'com.tinmegali.android:mcipher:0.4'

Uso

 String ALIAS = "alias" MEncryptor encryptor = new MEncryptorBuilder( ALIAS ).build(); MDecryptor decryptor = new MDecryptorBuilder( ALIAS ).build(); String toEncrypt = "encrypt this string"; // encrypting String encrypted = encryptor.encryptString( toEncrypt, this ); // decrypting String decrypted = decryptor.decryptString( encrypted, this ); 

MCipher es compatible con SDK 19+, y se adapta automáticamente a trozos de datos más pequeños y grandes. De forma predeterminada, usa AES/GCM/NoPadding para SDKs 23+ y RSA/ECB/PKCS1Padding para versiones anteriores.

MCipher en Github