vernam sustitucion studio por hill encriptar desencriptar descifrar contraseña cifrar cifrado atbash java android security cryptography

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?




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


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); } }