Wie entschlüssele ich eine Datei in Android mit AES?

Ich habe eine Datei (mp3), die ich verschlüssle. Ich beabsichtige dann, diese Datei auf ein Android-Gerät herunterzuladen und zu entschlüsseln. Während der Entschlüsselung erhalte ich jedoch eine IOException:

java.io.IOException: last block incomplete in decryption

Ich bin mir der offensichtlichen Sicherheitslücken im folgenden Code bewusst, ich versuche nur, es zuerst zum Laufen zu bringen.

Jede Hilfe in dieser Hinsicht ist willkommen und ich bin ein Neuling in der Programmierung im Allgemeinen. Entschuldigen Sie mich im Voraus, wenn dies eine dumme Frage ist!

Verschlüsselungsklasse (Nicht in Android gemacht, funktioniert):

public class EncryptFile {
public static void main(String args[]) {
    if (args.length < 1) {
        System.out.println("Usage: java EncryptFile <file name>");
        System.exit(-1);
    }
    try {
        File aesFile = new File("encodedfile.enc");
        FileInputStream fis;
        FileOutputStream fos;
        CipherInputStream cis;
         //Creation of Secret key
        String key = "mysecretkey";
        int length=key.length();
        if(length>16 && length!=16){
            key=key.substring(0, 15);
        }
        if(length<16 && length!=16){
            for(int i=0;i<16-length;i++){
                key=key+"0";
            }
        }
        SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(),"AES");
         //Creation of Cipher objects
        Cipher encrypt =Cipher.getInstance("AES/CBC/PKCS5Padding");

        byte[] aByte = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};


            IvParameterSpec ivSpec = new IvParameterSpec(aByte);

        encrypt.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
        try {
            fis = new FileInputStream(args[0]);
            cis = new CipherInputStream(fis,encrypt);
            // Write to the Encrypted file
            fos = new FileOutputStream(aesFile);
            byte[] b = new byte[8];
            int i = cis.read(b);
            while (i != -1) {
                fos.write(b, 0, i);
                i = cis.read(b);
            }
            fos.flush();
            fos.close();
            cis.close();
            fis.close();
        } catch(IOException err) {
            System.out.println("Cannot open file!");
            System.exit(-1);
        }
    } catch(Exception e){
        e.printStackTrace();
    }
}

}

Entschlüsselung (auf Android-Geräten):

    public class DecryptFile {  
  public static File main(String args[], File encFile, Context context) { 
      for (int i = 0; i < args.length; i++) {
        Log.i("ARGS", args[i]);
    }
       try {  
            File aesFile = new File(args[0]);  

            aesFile= encFile;  
            Log.d("AESFILELENGTH", "aes length: " + aesFile.length());
            File aesFileBis = new File(context.getFilesDir(), args[0]);

            FileInputStream fis;  
            FileOutputStream fos;  
            CipherInputStream cis;  

 //Creation of Secret key  
            String key = "mysecretkey";  
            int length=key.length();  
            if(length>16 && length!=16){  
                 key=key.substring(0, 15);  
            }  
            if(length<16 && length!=16){  
                 for(int i=0;i<16-length;i++){  
                      key=key+"0";  
                 }  
            }  
            SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(),"AES");  
             //Creation of Cipher objects  
            Cipher decrypt =Cipher.getInstance("AES/CBC/PKCS5Padding");  

            byte[] aByte = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};


            IvParameterSpec ivSpec = new IvParameterSpec(aByte);

            decrypt.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);  

 // Open the Encrypted file  

            fis = new FileInputStream(aesFile);  

            cis = new CipherInputStream(fis, decrypt);  

            // Write to the Decrypted file  
            fos = new FileOutputStream(aesFileBis);  
            try {

                byte[] mByte = new byte[8];  
                int i = cis.read(mByte); 
                Log.i("MBYTE", "mbyte i: " + i);
                while (i != -1) {  
                    fos.write(mByte, 0, i);  
                    i = cis.read(mByte);  
                }  
            } catch (IOException e) {
                e.printStackTrace();
            }


            fos.flush();  
            fos.close();  
            cis.close();  
            fis.close(); 
            return aesFileBis;
       } catch(Exception e){  
            e.printStackTrace();  
       }
    return null;  
  }  
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage