Это предупреждение против катастрофы безопасности.
В RSA мы ожидаем, что составной модуль n
имеет два простых множителя, близких к sqrt{n}
, в противном случае, если одно простое число мало, можно легко вычислитьваш модуль в n=p q
и введите ваш секретный показатель d
, BOOM.
Запустите key-gen, снова.Также предпочитаю использовать публичный показатель 3, 5, 17, 257 or 65537
.Это помогает иметь более быстрые вычисления.Вы использовали 17489 , что требует 4 умножения, однако 65537
требует 2 - не считая возведения в квадрат.
Также вам следует позвонить
Cipher.getInstance("RSA/ECB/PKCS1Padding");
или
Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING");
not
Cipher.getInstance("RSA");
Это небезопасно, податливо и имеет много атак.
RSA - функция люка.При шифровании и подписи его никогда не следует использовать без надлежащего заполнения.
обратите внимание, что RSA-подпись не является расшифровкой RSA.
также обратите внимание на то, что: На самом деле не рекомендуется использовать RSA для шифрования, в общем случае RSA используется для подписей.Мы объединяем симметричные и асимметричные схемы шифрования в Hybrid-Cryptosystem .Например, можно использовать Обмен ключами Диффи-Хеллмана , чтобы установить общий ключ с прямой секретностью , чтобы данные могли быть зашифрованы с помощью алгоритма симметричного шифрования, такого как AES, который намного быстрее, чемлюбая асимметричная криптосистема.Существует также Механизм инкапсуляции ключей (KEM) и он применим к RSA, известному как RSA-KEM, который можно использовать для установления ключа.