BadPaddingException: блок клавиатуры повреждается

Мэтью упомянул два важных улучшения: ваша цель case должна быть статическим выражением (тип которого является локально статическим типом), и если вы делаете синтез, вам нужно использовать цикл for.

Далее, вы не можете нарезать многомерный массив, следовательно, q_ctrl_reg (I, 31 до 0) также недопустим. Давайте исправим это, используя массив массива (показанный ниже):

type q_ctrl_reg_type is array (0 to MAX_REG -1) of std_logic_vector(31 downto 0) ; 
signal q_ctrl_reg : q_ctrl_reg_type ; 

Теперь давайте соберем все это вместе, позволим нам использовать цикл for вместо цикла while и оператор if вместо вашего оператора case. :

for i in 0 to generic_num_of_instances - 1 loop
  if loc_addr = 0 + I*256 then
      q_ctrl_reg(I) <= s_axi_wdata;
  end if;
end loop;
7
задан Bo Persson 27 July 2011 в 00:28
поделиться

3 ответа

Во-первых, для ясности, из комментариев ниже, вы не должны вызывать doFinal () для каждого блока, потому что doFinal () ожидает любого заполнения в конце, что, очевидно, не будет там в промежуточных блоках. Либо (а) вызовите update () для промежуточных данных, затем doFinal () в конце, либо (б) просто организуйте размещение всех ваших данных в одном буфере или байтовом массиве и вызовите doFinal () один раз для всей партии задания.

Из опубликованного вами кода не ясно, что именно вы делаете на самом деле, но об этом следует упомянуть на всякий случай.

Если это не удается, то в качестве первого шага к отладке я бы предложил любой из этих вариантов два проще для вас:

  • Расшифровка в режиме ECB без заполнения и просмотр того, что вы получите. Посмотрите на первый блок данных, который это возвращает.
6
ответ дан 6 December 2019 в 23:13
поделиться

Насколько мне известно, AES основан на Rijndael, но спецификация не совсем та. тем же. Я бы посоветовал проверить ключ и размер блока, который вы используете для шифрования на C #, и размеры, используемые в Java. (. Сетевые различия между Rijndael и AES ).

1
ответ дан 6 December 2019 в 23:13
поделиться

doFinal () был отменой приведенного выше кода, и в итоге я просто использовал потоки шифрования вместо подхода update / doFinal. Таким образом, я мог бы использовать FileInputStream и мой шифр в качестве параметров для CipherInputStream, а затем передать вывод в веб-браузер через OutputStream. Разделение update и doFinal на их собственные вызовы методов значительно усложнило задачу, и оба метода были удалены из класса дешифратора (оставив единственный цикл while, который считывает фрагменты данных и выводит их в браузер). Провайдер Bouncy Castle Provider в этом случае также не понадобился, и достаточно было PKCS5Padding, предоставленного SunJCE.

1
ответ дан 6 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: