Manière correcte de Cryptage et de Décryptage d'une Image à l'aide d'AES

EDIT ::: le code de La question des œuvres, mais il faut environ 10 secondes pour revenir à l'activité une fois que l'image est prise à huis clos. J'ai renoncé à cette approche et Facebook de Dissimuler la Bibliothèque pour chiffrer et déchiffrer les images. Lien Facebook de la Solution : Facebook Dissimuler Image de Chiffrement et de Déchiffrement


J'ai regardé beaucoup d'exemples, mais ne pouvait toujours pas trouver un moyen d'obtenir le Chiffrement et le Déchiffrement droit. J'ai pensé que je l'ai eu à corriger quand j'ai pris un code aléatoire sur l'internet, mais lors du décodage, je reçois un BadPadding Exception.

Donc, je suis en train de travailler. Je suis à la suite de la question ci-dessous, comme suggéré par la plupart des gens de la SORTE (mais ce code montre comment crypter une chaîne de caractères). Peut quelqu'un m'aider dans le cryptage et le décryptage de l'image? Le code est dans la question du travail pour les images?

Lien à la question : Java 256-bit AES Chiffrement par Mot de passe

Voici ce que j'ai fait jusqu'à présent:

/Global/liste de tableaux pour stocker iv et de chiffrement

static ArrayList<byte[]> ivandcipher = new ArrayList<byte[]>();

//Génération De La Clé

public static SecretKey generateKey() throws NoSuchAlgorithmException {

    char[] password = { 'a', 'b', 'c', 'd', 'e' };
    byte[] salt = { 1, 2, 3, 4, 5 };

    SecretKeyFactory factory = SecretKeyFactory
            .getInstance("PBKDF2WithHmacSHA1");
    KeySpec spec = new PBEKeySpec(password, salt, 65536, 256);
    SecretKey tmp = null;
    try {
        tmp = factory.generateSecret(spec);
    } catch (InvalidKeySpecException e) {
        e.printStackTrace();
    }

    yourKey = new SecretKeySpec(tmp.getEncoded(), "AES");

    return yourKey;
}

//Fichier De Codage

//byte[] fileData, contient l'image bitmap(image) est converti en byte[]

public static ArrayList<byte[]> encodeFile(SecretKey yourKey, byte[] fileData)
        throws Exception {

    byte[] encrypted = null;

    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, yourKey);
    AlgorithmParameters params = cipher.getParameters();
    byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
    encrypted = cipher.doFinal(fileData);   

    ivandcipher.clear();
    ivandcipher.add(iv);
    ivandcipher.add(encrypted);

    return ivandcipher;
}

Pourquoi suis-je en ajoutant iv et chiffré byte[]s à ivandcipher. Parce que, comme la réponse dans le lien l'indique, que je devrais être en utilisant le même iv tandis que le déchiffrement.

//Décoder le fichier

//J'appelle une surcharge decodeFile méthode à l'intérieur de cette méthode.. s'il vous plaît noter

private Bitmap decodeFile(String filename) {

    try {
        yourKey = generateKey();
    } catch (NoSuchAlgorithmException e1) {
        e1.printStackTrace();
    }

    try {
        byte[] decodedData = decodeFile(yourKey, readFile(filename));
        Bitmap bitmap = bytesToBitmap(decodedData);

        return bitmap;
    } catch (Exception e) {
        e.printStackTrace();
    }

    return null;
}

//surcharge decodeFile méthode

public static byte[] decodeFile(SecretKey yourKey, byte[] fileData)
        throws Exception {

    byte[] decrypted = null;
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, yourKey, new IvParameterSpec(ivandcipher.get(0)));
    decrypted = cipher.doFinal(fileData);
    return decrypted;
}

Je crois que le problème est avec le fileData[], que je ne suis pas en mesure de chiffrer et de déchiffrer correctement. Pour les Chaînes de caractères comme indiqué dans la réponse de la le lien ci-dessus, c'est à dire,

byte[] ciphertext = cipher.doFinal("Hello, World!".getBytes("UTF-8"));

ce qui devrait être donné en paramètre de chiffrement.doFinal()?

Laissez-moi savoir si vous avez besoin d'un autre morceau de code.

  • aucune raison pour downvote? je comprends ce qui a été demandé à plusieurs reprises, mais je ne pouvais pas obtenir un bon encyption et de décryptage pour mes images.
  • La raison en est essentiellement que vous avez copié "certains code aléatoire sur l'internet", n'est-ce pas le faire fonctionner, et maintenant, nous sommes censés résoudre.
  • Je ne suis pas demander à quelqu'un pour le réparer. Je demande votre aide dans la compréhension et la rendre au travail. Et btw, le code que j'ai posté dans la question, n'est pas aléatoire, son à partir du lien que j'ai posté dans la question.
  • votre code devrait fonctionner. probablement un problème dans readFile(nom de fichier). ne retourne rien? comment enregistrer/lire à partir du fichier?
InformationsquelleAutor Vamsi Challa | 2014-09-26