расшифровать зашифрованный файл с размером блока 256 бит в Java (шифрование Rijndael C#)

Мне нужно расшифровать файл на Java.
Файл был зашифрован на C# с помощью RijndaelManaged. Это параметры С# для шифрования (обобщенные и не упомянутые значения по умолчанию):

var crypto = new RijndaelManaged();
crypto.GenerateKey();
crypto.BlockSize = crypto.KeySize;
crypto.IV = crypto.Key;
crypto.Padding = PaddingMode.Zeros;

мой код Java до сих пор, который вызывает ошибку:

java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 16 bytes long:

Key aesKey = new SecretKeySpec(key, "AES");
Cipher cipher2 = Cipher.getInstance("AES/CBC/noPadding");
byte[] iv = key;
IvParameterSpec ivspec = new IvParameterSpec(iv);
cipher2.init(Cipher.DECRYPT_MODE, aesKey, new IvParameterSpec(iv));
byte[] decryptedFile = cipher2.doFinal(buildFile);

Я вижу 2 проблемы, связанные с кодом С#:

  1. сгенерированный ключ имеет длину 256 бит. Затем размер блока устанавливается равным 256 бит, но стандартом является 128 бит. Насколько мне известно, Java может использовать только 128-битный размер блока, как следует из сообщения об ошибке. По крайней мере, я не узнал, как установить размер блока.
  2. Rijndael использует PaddingMode.Zeros, что эквивалентно Padding для Cipher?

обратите внимание, что я не могу изменить код C#

Есть ли способ расшифровать это на Java?

Обновление — Решение
Наконец-то мне удалось расшифровать файл с помощью BouncyCastle, предложенный Topaco в комментариях.
BouncyCastle включает RijndaelEngine, как и часть C#. Это позволяет установить размер блока 256 бит.

Чтобы ответить на мой 2. вопрос: PaddinMode.Zeros равно new ZeroBytePadding()

Полный код:

import org.bouncycastle.crypto.BlockCipher;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.engines.RijndaelEngine;
import org.bouncycastle.crypto.modes.CBCBlockCipher;
import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
import org.bouncycastle.crypto.paddings.ZeroBytePadding;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.params.ParametersWithIV;
...

private byte[] decryptPart(byte[] part, byte[] key) throws Exception {
    BlockCipher engine = new RijndaelEngine(key.length * 8);
    PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(engine),
            new ZeroBytePadding());

    KeyParameter keyParam = new KeyParameter(key);
    CipherParameters cipherParams = new ParametersWithIV(keyParam, key);
    cipher.init(false, cipherParams);
    byte[] output = new byte[cipher.getOutputSize(part.length)];
    int tam = cipher.processBytes(part, 0, part.length, output, 0);
    try {
        cipher.doFinal(output, tam);
    } catch (Exception ce) {
        ce.printStackTrace();
    }
    return output;
}

person Niklas Meier    schedule 10.07.2020    source источник
comment
Код C#, который вы предоставляете, не содержит никакой информации о реализации. Как сделать вывод, что размер блока равен 256? Если размер блока 256 бит, то это не AES.   -  person Ebbe M. Pedersen    schedule 10.07.2020
comment
Я предполагаю, что GenerateKey() генерирует 256-битный ключ. У меня есть пример ключа   -  person Niklas Meier    schedule 10.07.2020
comment
Размер блока AES всегда 128 бит. Rijndael поддерживает размер блока 256 бит, но это уже не AES.   -  person Ebbe M. Pedersen    schedule 10.07.2020
comment
Код C# использует Rijndael с размером блока 256 бит и без AES (AES — это подмножество Rijndael, Rijndael определяет разные размеры блоков, Aes — только 128 бит). Провайдер SunJCE для Java не поддерживает Rijndael с размером блока 256 бит, необходимо использовать стороннего провайдера, например. BouncyCastle, здесь.   -  person user 9014097    schedule 10.07.2020
comment
Не могли бы вы предоставить тестовый набор данных (открытый текст, зашифрованные данные, ключ, iv [кажется, то же самое, что и ключ]) для проверки реализации расшифровки Java?   -  person Michael Fehr    schedule 10.07.2020
comment
смог решить вопрос. Обновил мой пост. Спасибо за помощь   -  person Niklas Meier    schedule 24.07.2020