Обеспечение независимости программы RSA Encryption Java от платформы - PullRequest
0 голосов
/ 12 апреля 2020

Я создал программу GUI Java для дешифрования файлов с использованием ключей RSA.

Однако шифрование было выполнено на компьютере IBM AIX, который использовал IBM JCE Provider.

Теперь я снова сгенерирую jar-файл расшифровки на той же платформе, т.е. AIX Machine.

Мой вопрос заключается в том, будет ли этот jar-файл нормально работать на windows машинах? как в windows Поставщики JCE - это СОЛНЦЕ JCE, а не IBM JCE.

Или мне придется установить этот IBM JCE на машину, где требуется выполнить Jar?

1 Ответ

2 голосов
/ 12 апреля 2020

В основном большинство провайдеров созданы для совместимости с реализациями Sun / Oracle, которые они предоставляют. Это означает, что если вы указываете алгоритм, который находится в списке предоставленных алгоритмов , то он обычно совместим. Если он находится в списке Java требований к реализации , то вы можете быть практически уверены.

Реализация IBM JCA в основном соответствует sh той, которую предоставляет Oracle. Я бы не скопировал .jar, если у вас нет другого выбора. Криптографическая архитектура Java была явно указана для того, чтобы пользовательские вызовы были агностированными c, поэтому вы должны попытаться заставить ее работать, не требуя внешней библиотеки.

Обратите внимание, что многие алгоритмы в JCA используют инструкции с аппаратным ускорением, такие как AES-NI, поэтому использование реализаций OpenJDK / Sun / Oracle может дать хорошее ускорение.

Существует несколько способов повысить вероятность совместимости:

  • не указывать специфицированного c провайдера;
  • не использовать заданное c имя для генератора случайных чисел (используйте new SecureRandom() или локальный генератор случайных чисел потока);
  • не используйте имена, отличные от алгоритмов в списке, например, не используйте более логичные "RSA/None/PKCS1Padding" или "AES/CBC/PKCS7Padding", но придерживайтесь "RSA/ECB/PKCS1Padding" и "AES/CBC/PKCS5Padding", даже если они имеют меньше смысла ;
  • всегда создайте и укажите IV для режимов блочного шифра, отличных от ECB, потому что спецификатор провайдера c IV может быть либо нулевым, либо рандомизированным;
  • d не используйте провайдера c спецификации параметров / параметров, хранилища ключей и т. д. c.
  • используют размеры ключей, поддерживаемые требованиями реализации Java, или по крайней мере те, которые предоставляются провайдерами OpenJDK.
...