Я шифрую данные с помощью алгоритма AES/CFB/NoPadding в С#, но я не могу расшифровать с помощью одного и того же режима в java.. Я получил другой результат.
Режим CFB-NoPadding позволяет выводить любые данные в байтах и данные одинаковой длины.
Я могу сделать это при использовании режима заполнения CBC.. но он не работает в CFB без режима заполнения.
Может кто-нибудь мне помочь?
С# шифровать Код:
_assistantRM.Mode = CipherMode.CFB;
_assistantRM.Padding = PaddingMode.None;
_assistantRM.FeedbackSize = 8;
_assistantRM.IV = new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF };
_assistantRM.Key = _assitantKey;
Код расшифровки Java:
SecretKeySpec sk = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CFB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, sk, new byte[] { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF });
byte[] result = cipher.doFinal(bytes);
return result;
В строке алгоритма в Java существует малоизвестный коммутатор. Попробуйте "AES/CFB8/NoPadding"
(обратите внимание на 8 символов за B). Он настраивает количество бит, используемых в качестве обратной связи от зашифрованного блока.
Обратите внимание, что обычно восстановление ошибок CFB больше не используется. Гораздо эффективнее использовать полные 128 бит обратной связи. Или вы можете использовать другой режим полностью, например, шифрование в режиме CTR или GCM.