Консультации по производительности шифрования файлов в Java

Я выполняю некоторую работу, связанную с шифрованием файлов. Я могу зашифровать / расшифровать файлы, но столкнулся с серьезной проблемой производительности. Когда я просто читаю / записываю видеофайл размером 700 МБ, мой код работает со скоростью около 27-28 МБ / с. Но когда я выполняю шифрование (в настоящее время я использую PBEWithMD5AndDES, который я изменю позже), код показывает скорость 9 МБ / с. Посоветуйте, пожалуйста, что я могу улучшить.

Фрагмент кода:

    int c = 0, BUF_SIZE = 8192;
    byte[] b = new byte[BUF_SIZE];
    FileInputStream fis;
    DataInputStream dis;
    FileOutputStream fos;
    DataOutputStream dos;
    CipherOutputStream cos;


    try {
        // Create PBE parameter set
        pbeParamSpec = new PBEParameterSpec(salt, iterationCount);

        // Create PBE Cipher
        Cipher pbeCipher = Cipher.getInstance(algorithm);

        // get key
        key = generateKeyFromPassword(password);

        // Initialize PBE Cipher with key and parameters
        pbeCipher.init(Cipher.ENCRYPT_MODE, key, pbeParamSpec);

        fis = new FileInputStream(inFile);
        dis = new DataInputStream(fis);
        fos = new FileOutputStream(outFile);
        dos = new DataOutputStream(fos);
        cos = new CipherOutputStream(fos, pbeCipher);


        while ((c = dis.read(b)) > 0) {
            cos.write(b);
            //dos.write(b);
        }

        fis.close();
        dis.close();
        //dos.close();
        cos.close();


    } catch (Exception e) {
        e.printStackTrace();
    }

Статистика без шифрования:
Скорость составляет около 27,97 МБ / с
Точное время = 25,02 секунды
Размер файла = 700 МБ

Статистика с шифрованием:
Скорость около 9,69 МБ / с
Точное время = 72,171 сек
Размер файла = 700 МБ

6
задан CodesInChaos 29 January 2012 в 10:39
поделиться