我需要创建一个解密视频文件的实现。我目前正在使用 AesBase64 算法来解密这些视频,但是在我的测试中,由于字节数组并完全在内存中释放,所以在我的测试中解密变得过于繁重,因此当文件超过时我得到 java.lang.OutOfMemoryError 25 MB。我的问题是:如何为我实现一个缓冲区来解密每个字节数组并已经播放每个解密字节的视频?
1 回答
0
我不确定“AesBase64”是什么意思,但它听起来像是 AES 加密和 Base64 编码的混搭。您可以使用Cipher类的更新方法来实现流式解密器。不幸的是,android Base64类并不真正支持零碎的 base64 解码,尽管您可以自己实现它而无需太多努力。但是,存在一个更简单的替代方案:使用CipherInputStream和Base64InputStream。
使用类似下面的东西:
public void decrypt(String filename) throws Exception {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("filename"));
Base64InputStream base64Stream = new Base64InputStream(bis, 0);
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
CipherInputStream cis = new CipherInputStream(base64Stream, c);
byte[] plainBuf = new byte[2048];
int nRead;
while ((nRead = cis.read(plainBuf)) > 0) {
// send plainBuf[0] through plainBuf[nRead-1] to the video codec
}
cis.close();
}
于 2015-09-20T13:11:54.483 回答