Я пытаюсь зашифровать файл открытым ключом, который я получаю из сертификата.Java RSA-шифрование с открытым ключом
PublicKey publicKey = cert.getPublicKey();
cipher = Cipher.getInstance("RSA", "BC");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
бросает исключение: java.lang.IllegalArgumentException: не ключ RSA!
Я пробовал:
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec spec = new X509EncodedKeySpec(publicKey.getEncoded());
PublicKey rsaPublicKey = KeyFactory.getInstance("RSA").generatePublic(spec);
но бросает java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException
: Invalid RSA открытый ключ
constractor из org.bouncycastle.asn1.pkcs.RSAPublicKey
ожидает 2 BigInteger
с (вероятно, модуль и общественный показатель) ,
Взгляд в cert.getPublicKey()
показывает его DSAPublicKeyImpl
.
Как я могу преобразовать его в RSAPublicKey
(или что-нибудь еще), которое можно использовать на Cipher.getInstance("RSA", "BC")
?
Да, я на самом деле пытаюсь зашифровать симметричный ключ, я просто пытался упростить проблему. Тем не менее, я не могу сгенерировать ключи получателя, у меня есть его сертификат, как я могу зашифровать ключ для него? – user3116865
@ user3116865 * DSA предназначен только для подписей ** **. Если получатель хочет получить зашифрованные сообщения, ему необходимо будет провести обмен ключами Диффи-Хеллмана, подписать его вклад в обмен со своим сертификатом DSA или создать новую пару ключей RSA, чтобы вы могли зашифровать ключ. – erickson