为什么我的一个解密方法运行速度比另一个快?

时间:2012-03-29 02:04:29

标签: java android outputstream des

我创建了加密解密方法来加密图像和视频。我正在部分加密视频,确切地说是1 MB。更复杂的解密方法让位于解密Android设备上的内容。然而,img_decrypt并不需要很长时间。不知道他们为什么这样做。

这是一个 这个人可以解密完全加密视频或图像。以ms为单位解密完整图像无法解密部分加密的视频。

  public void img_decrypt(InputStream in, OutputStream out) {
    try {
        // Bytes read from in will be decrypted
        in = new CipherInputStream(in, dcipher);

        // Read in the decrypted bytes and write the cleartext to out
        int numRead = 0;


        while ((numRead = in.read(buf)) >= 0 ) {

            out.write(buf, 0, numRead);
        }


        out.close();
    } catch (java.io.IOException e) {
    }
} 

这是另一个。这需要永远运行。将解密完全加密的图像或部分加密的视频。

    public void decrypt(InputStream in, OutputStream out) {
    try {
        // Bytes written to out will be decrypted
        AppendableOutputStream out_append = new AppendableOutputStream(out);
        System.out.println(ecipher.getOutputSize(1024*1024));
        OutputStream out_d = new CipherOutputStream(out_append, dcipher);

        // Read in the decrypted bytes and write the cleartext to out
        int numRead = 0;
        int count = 0;
        int max = 1024;
        boolean out_d_closed = false;

        while ((numRead = in.read(buf, 0, max)) > 0) {
            count += numRead;
            if(count <= ecipher.getOutputSize(1024*1024)){
                out_d.write(buf, 0, numRead);
                out_d_closed = false;
                // last encryption pass, close buffer and fix max
                if(count == ecipher.getOutputSize(1024*1024)){
                    // fix reading 1k in case max was decreased
                    max = 1024;
                    out_d.close();
                    out_d_closed = true;
                }
                // if next read will go over a meg, read less than 1k
                else if(count + max > ecipher.getOutputSize(1024*1024))
                    max = ecipher.getOutputSize(1024*1024) - count;
            }
            // past the first meg, don't decrypt
            else{
                out.write(buf, 0, numRead);
            }

        }
        if(!out_d_closed){

            out_d.close();

        }
        out.close();
    } catch (java.io.IOException e) {

        e.printStackTrace();

    }
}

因为decrypt()方法需要很长时间来解密100KB文件,设备会要求我中止或等待。

如果我使用img_decrypt(),它根本不工作。对我来说,没有任何意义他们正在做同样的事情。

我试图使用decrypt()来解密视频的第一个MB。

在电脑上一切正常。

任何想法都可能有所帮助。

这两种方法都可用于解密完全加密的文件,但解密()过程时间过长。

还有一件事。 decrypt()解密写入数据。 img_decrypt()解密读取的数据。不知道这是否会产生任何影响。

由于

1 个答案:

答案 0 :(得分:0)

如果有人关心。 FilterOutputStream实现错误。 Sun写的写法错误了。必须覆盖写入才能正常工作。