Расшифровка mp4 на лету - PullRequest
       2

Расшифровка mp4 на лету

2 голосов
/ 16 октября 2011

Позвольте мне объяснить, что я хочу сделать.У меня есть зашифрованный файл mp4, который использует модель AES / CBC / PKCS5Padding.Теперь я поместил его на свой веб-сервер для себя, чтобы использовать его для сетевого Android MediaPlayer и воспроизвести его через потоковую передачу по сети mp4.

Я использовал CipherInputstream для расшифровки зашифрованного файла mp4 и поместил его в InputStreamEntity, но это не сработало, поэтому янужно какое-то предложение, как я могу сделать.

Некоторые коды, ...

public void InitCiphers()
            throws NoSuchAlgorithmException,
            NoSuchProviderException,
            NoSuchProviderException,
            NoSuchPaddingException,
            InvalidKeyException,
            InvalidAlgorithmParameterException{

   //1. create the cipher using Bouncy Castle Provider
   encryptCipher =
           Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
   //2. create the key
   SecretKey keyValue = new SecretKeySpec(key,"AES");
   //3. create the IV
   AlgorithmParameterSpec IVspec = new IvParameterSpec(IV);
   //4. init the cipher
   //encryptCipher.init(Cipher.ENCRYPT_MODE, keyValue, IVspec);
   encryptCipher.init(Cipher.ENCRYPT_MODE, keyValue);

   //1 create the cipher
   decryptCipher =
           Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
   //2. the key is already created
   //3. the IV is already created
   //4. init the cipher
   //decryptCipher.init(Cipher.DECRYPT_MODE, keyValue, IVspec);
   decryptCipher.init(Cipher.DECRYPT_MODE, keyValue);
}

public void CBCEncryptCipherStream(InputStream fis, OutputStream fos) throws IOException, ShortBufferException, IllegalBlockSizeException, BadPaddingException{
    byte[] buf = new byte[1024];

    fos = new CipherOutputStream(fos, encryptCipher);

    int numRead = 0;
    while ((numRead = fis.read(buf)) >= 0) {
        fos.write(buf, 0, numRead);
    }
    fos.close();
}

public InputStream CBCDecryptStream(InputStream encryptedInputStream){
    InputStream decryptedInputStream = null;
    decryptedInputStream = new CipherInputStream(encryptedInputStream, decryptCipher);
    return decryptedInputStream;

}

Тогда,

InputStream datastream = bcAES_CBC_128.CBCDecryptStream(new FileInputStream(encyptedPlayFile));

bodystream= new InputStreamEntity(datastream, filesize);

response.setEntity(bodystream);
bodystream.setContentType("video/mpeg");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...