sustitucion - encriptar contraseña java
Cifrado de Android (4)
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?
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.
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);
}
}