Estoy trabajando en una aplicación de Android, y necesito usar encriptación para un aspecto de la misma. 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?Cifrado de Android
Respuesta
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 ASUNTA pregunta Java 256bit AES Encryption.
Castillo Hinchable 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);
}
}
Security.addProvider (new org.bouncycastle.jce.provider.BouncyCastleProvider()) ¿Qué hace esto? –
Seguridad.addProvider le informa a Java que está planeando usar un proveedor de seguridad en particular (básicamente instala ese proveedor de seguridad en el administrador de seguridad, similar a cargar una biblioteca). –
Acabo de tener lo que asumiré que es la coincidencia más extraña de todas: miré el video de Youtube enlazado, y después de descifrar cada octeto de la fila superior (de derecha a izquierda) reinicié mi computadora. Cuando revisé el registro del sistema, fue debido a la temperatura de la CPU por encima del umbral. Cuando abrí mi computadora para cambiar la masilla térmica con ártico plateado 5, vi que el ventilador del disipador de calor en la tarjeta de video estaba quemado (literalmente marrón, burbujeante y deformado). No puedo evitar ser paranoico de que haya algún software de falla defectuoso. – snapfractalpop
Mira mi respuesta aquí Android database encryption. Contiene 2 archivos que puede incluir en cualquiera de sus aplicaciones que requieren cifrado de almacenamiento de datos.
Lo voy a probar mañana. Es muy interesante. Gracias hermano. – EliaszKubala
También verificaría Oculta para ver si se ajusta a su 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 bibliotecas nativas de Android y Java para hacer el proceso 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 SDK de 19+ y se adapta automáticamente a las partes más pequeñas y grandes de datos. De forma predeterminada, usa AES/GCM/NoPadding
para SDKs 23+ y RSA/ECB/PKCS1Padding
para versiones anteriores.
- 1. cifrado sqlite para Android
- 2. Cifrado básico en Android
- 3. Android 2.1: Cifrado Bluetooth
- 4. Cifrado de Blowfish en android
- 5. Android ICS dispositivo de cifrado
- 6. Android: ¿Cómo obtener el cifrado Wifi actual?
- 7. Cifrado compatible entre Android y C#
- 8. cifrado RSA: Diferencia entre Java y Android
- 9. ¿Cifrado y cifrado son diferentes?
- 10. Ocultar la clave de cifrado en la Aplicación de Android
- 11. Usando Android NDK para el cifrado de datos pasados desde la aplicación normal de Android
- 12. Cifrado Rsync
- 13. Cifrado asimétrico
- 14. cifrado Web.Config
- 15. Bibliotecas de cifrado?
- 16. Cifrado simple de Java
- 17. Web.config Error de cifrado
- 18. Contraseñas de cifrado
- 19. Depósito cifrado de Subversion
- 20. VIM: Clave de cifrado
- 21. general cadena de cifrado
- 22. asp.net cifrado de viewstate
- 23. Biblioteca de cifrado As3
- 24. Cifrado de cadena multiplataforma
- 25. Identificar el algoritmo de cifrado GSM
- 26. de componentes para el cifrado
- 27. Biblioteca de cifrado .NET recomendada
- 28. A Dificultad de seguridad (cifrado)
- 29. Buenos libros de criptografía/cifrado
- 30. Biblioteca de cifrado bidireccional Java
El algoritmo depende mucho del escenario de uso. ¿Qué es lo que estás protegiendo, de quién, dónde, por qué y cómo planeas hacerlo? AES (cifrado simétrico) y RSA (asimétrico) funcionan de manera muy diferente. –
Simplemente estoy almacenando un nombre de usuario y contraseña localmente en el dispositivo. Tengo una implementación de RSA y la utilicé para mis propósitos. –
@Steven - No estoy seguro de que RSA sea el mejor sistema para eso. –