Java - BouncyCastle - 3DES шифрование и дешифрование файлов: файлы повреждены после прохождения туда-обратно - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь зашифровать и расшифровать файлы с помощью BouncyCastle 3DES.Но файлы повреждены после шифрования и дешифрования.Например, простой текстовый файл или файл jpg-изображения.Это мой код:

ZipUnzipBouncyCastle()
{
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
}


public void encrypt3DES(String password, String file)
        throws IOException, DataLengthException, IllegalStateException,
        InvalidCipherTextException, NoSuchAlgorithmException
{
    byte[] data = Files.readAllBytes(new File(file).toPath());

    SecureRandom random = new SecureRandom(data);
    KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
    keyGenerator.init(168, random);
    SecretKey secreteKey = keyGenerator.generateKey();

    BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(
            new CBCBlockCipher(new DESedeEngine()));

    cipher.init(true, new KeyParameter(secreteKey.getEncoded()));

    byte[] result = new byte[cipher.getOutputSize(data.length)];
    int tam = cipher.processBytes(data, 0, data.length, result, 0);
    cipher.doFinal(result, tam);

    byte[] encodedData = Base64.getEncoder().encode(result);

    FileOutputStream fileOutputStream = new FileOutputStream(file);
    fileOutputStream.write(encodedData);
    fileOutputStream.flush();
    fileOutputStream.close();
}

public void decrypt3DES(String password, String file)
        throws NoSuchAlgorithmException, DataLengthException,
        IllegalStateException, InvalidCipherTextException, IOException
{
    byte[] data = Files.readAllBytes(new File(file).toPath());

    byte[] decodedData = Base64.getDecoder().decode(data);

    SecureRandom random = new SecureRandom(decodedData);
    KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
    keyGenerator.init(168, random);
    SecretKey secreteKey = keyGenerator.generateKey();

    BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(
            new CBCBlockCipher(new DESedeEngine()));

    cipher.init(true, new KeyParameter(secreteKey.getEncoded()));
    byte[] result = new byte[cipher.getOutputSize(decodedData.length)];
    int tam = cipher.processBytes(decodedData, 0, decodedData.length, result, 0);
    cipher.doFinal(result, tam);

    FileOutputStream fileOutputStream = new FileOutputStream(file);
    fileOutputStream.write(result);
    fileOutputStream.flush();
    fileOutputStream.close();
}

Я просмотрел весь Интернет, но не смог найти объяснения.Что я делаю неправильно?

...