gpt4 book ai didi

android - 加速加密/解密?

转载 作者:太空狗 更新时间:2023-10-29 13:39:21 24 4
gpt4 key购买 nike

我有一个加密和解密代码,我用它来加密和解密视频文件(mp4)。我正在尝试加快解密过程,因为加密过程与我的情况无关。这是我用于解密过程的代码:

private static void  decryptFile() throws IOException, ShortBufferException, IllegalBlockSizeException, BadPaddingException
{

//int blockSize = cipher.getBlockSize();
int blockSize = cipher.getBlockSize();
int outputSize = cipher.getOutputSize(blockSize);
System.out.println("outputsize: " + outputSize);
byte[] inBytes = new byte[blockSize];
byte[] outBytes = new byte[outputSize];
in= new FileInputStream(inputFile);
out=new FileOutputStream(outputFile);

BufferedInputStream inStream = new BufferedInputStream(in);
int inLength = 0;;
boolean more = true;
while (more)
{
inLength = inStream.read(inBytes);
if (inLength == blockSize)
{
int outLength
= cipher.update(inBytes, 0, blockSize, outBytes);
out.write(outBytes, 0, outLength);

}
else more = false;
}
if (inLength > 0)
outBytes = cipher.doFinal(inBytes, 0, inLength);
else
outBytes = cipher.doFinal();

out.write(outBytes);

}

我的问题是如何加快这段代码中的解密过程。我试过解密一个 10MB 的 mp4 文件,它在 6-7 秒内解密。但是,我的目标是 < 1 秒。我想知道的另一件事是,如果我写入 FileOutputStream out 实际上是在减慢进程而不是解密过程本身。关于如何在此处加快速度的任何建议。

我正在使用 AES 进行加密/解密。

在找到解决方案之前,我将使用 ProgressDialog,它会告诉用户等待视频解密(显然,我不会使用“已解密”这个词)。

最佳答案

为什么只按 blockSize 增量解密数据?您没有显示 cipher 是什么类型的对象,但我猜这是一个 javax.crypto.Cipher 实例。它可以处理对任意长度数组的 update() 调用,如果使用更长的数组,开销就会少得多。您应该按 block 处理数据,例如 8192 字节(这是缓冲区的传统长度,它与 CPU 内部缓存的交互相当好)。

关于android - 加速加密/解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7713166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com