javax.crypto.IllegalBlockSizeException в шифровании AES

Я использую стандарт заполнения AES/CBC/PKCS5Padding в java, а мой друг использует стандарт PKCS7 в c#.NET. Если мой друг шифрует данные с помощью AES и отправляет мне ключ, я могу его расшифровать.

Но если длина моих данных увеличивается более чем на 2920 байт, то, если я зашифрую данные в С#.NET и расшифрую данные в java, тогда мое расшифрование не будет работать хорошо. Это дает мне следующую ошибку.

«javax.crypto.IllegalBlockSizeException: длина ввода должна быть кратна 16 при расшифровке с помощью дополненного шифра»

Спасибо, Бапи.


person Deepak    schedule 08.05.2009    source источник
comment
Поиск в Google для длины ввода должен быть кратным 16, когда расшифровка с помощью дополненного шифра дает много ответов.   -  person skaffman    schedule 08.05.2009
comment
Добавлен тег C# — это звучит как проблема с отсутствием очистки буфера в C#, которую вы затем видите в Java. Вы также можете обойти всю проблему заполнения, используя (как правило, более безопасный) режим CTR.   -  person Neil Coffey    schedule 08.05.2009


Ответы (2)


Вы снова забыли сбросить буферы, что означает, что поток данных неполный.

[EDIT] Я не знаю о C#, но в Java вы должны вызывать doFinal() один раз после получения всех данных. (См. документацию. ).

Источник проблемы в том, что API шифрования должен знать, когда вы закончите. Это не может сказать по данным, вы должны вызвать метод, чтобы сказать: «заверните это, создайте окончательную контрольную сумму, что угодно, чтобы получатель мог ее декодировать».

person Aaron Digulla    schedule 08.05.2009

просто используйте cipher.dofinal("Your byte array","offset...put 0","block size...16");

eg : c.dofinal(ByteArray,0,16);
person Anish    schedule 24.03.2010