首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加速加密/解密?

加速加密/解密?
EN

Stack Overflow用户
提问于 2011-10-10 21:03:02
回答 5查看 4.9K关注 0票数 3

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

代码语言:javascript
运行
复制
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输出的写入是否真的减慢了解密过程,而不是解密过程本身。关于如何在这里加快速度的任何建议。

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

在找到解决方案之前,我将使用一个ProgressDialog,它告诉用户等待视频被解密(显然,我不会使用单词: decrypted)。

EN

回答 5

Stack Overflow用户

发布于 2011-10-10 21:28:26

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

票数 4
EN

Stack Overflow用户

发布于 2015-10-16 21:22:24

通过饼干,你的问题给了我过去6天来一直在尝试的答案。我只是稍微修改了一下你的代码,我的52MB视频文件在4秒内就被解密了。之前的解密技术花了45秒,这是一个不同的逻辑(不是你的)。这是45秒到4秒的巨大差异。无论我在哪里做了修改,我都会放入//修改过的注释行。我敢肯定,如果你的视频是10mb的视频,它肯定会在1秒内被解密。试着应用这个,它应该会起作用的。

代码语言:javascript
运行
复制
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*1024]; //modified
        byte[] outBytes = new byte[outputSize * 1024]; //modified
        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/1024 == blockSize) //modified
             {
                int outLength 
                   = cipher.update(inBytes, 0, blockSize*1024, outBytes);//modified
                out.write(outBytes, 0, outLength);

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

          out.write(outBytes);

}
票数 1
EN

Stack Overflow用户

发布于 2011-10-10 21:36:50

我建议您使用android sdk中提供的分析工具。它会告诉你你在哪里花费的时间最多(例如:文件写入或解码)。

请参阅http://developer.android.com/guide/developing/debugging/debugging-tracing.html

这在仿真器和实际设备上都有效。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7713166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档