Почему мой метод расшифровки работает быстрее, чем другой? - PullRequest
0 голосов
/ 29 марта 2012

Я создал методы дешифрования шифрования для шифрования изображений и видео.Я частично шифрую видео, если быть точным, 1 МБ.Более сложный метод расшифровки может занять много времени, чтобы расшифровать контент на устройстве Android.Однако img_decrypt не займет много времени.Не уверен, почему они это делают.

вот тот. Этот можно расшифровать полностью, зашифровывает видео или изображения.Расшифровывает полные изображения в мс, но не работает для дешифрования частично зашифрованных видео.

  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 () занимает долго SOOOOOO для расшифровки файла размером 100 КБ, устройство запрашивает прерывание или ожидание.

ЕслиЯ использую img_decrypt (), он работает совсем не вовремя.Что для меня не имеет смысла, они делают то же самое.

Я пытаюсь использовать decrypt () для расшифровки первого МБ видео.

На компьютере все работает нормально.

Любые мысли могут быть полезны.

Оба метода работают для дешифрования полностью зашифрованного файла, хотя decrypt () занимает слишком много времени.

Еще одна вещь.decrypt () расшифровывает данные при записи.img_decrypt () расшифровывает данные на чтение.Не знаю, повлияет ли это на что-либо.

Спасибо

1 Ответ

0 голосов
/ 29 марта 2012

Если кому-то все равно. FilterOutputStream реализован неправильно. Sun написал неправильный метод записи. Для корректной работы записи необходимо переопределить запись.

...