Алгоритм RSA PKCS # 1.5, шифрование пароля (не OEAP) с открытым ключом сертификата клиента в Java

Я новичок в алгоритме RSA и криптографии в Java. У меня есть сертификат клиента, предоставленный сторонней организацией в формате .cer. Теперь мне нужно зашифровать свой пароль с помощью открытой части сертификата ключа пароля, используя алгоритм RSA и заполнение PKCS # 1.5 - но не OAEP - в Java.

Не могли бы вы проверить, работает ли следующее?

Security.addProvider(neworg.bouncycastle.jce.provider.BouncyCastleProvider());
byte[] input = "Abc123".getBytes();
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
FileInputStream fin = new FileInputStream(new File("/test.cer"));
CertificateFactory f = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate)f.generateCertificate(fin);
PublicKey pk = certificate.getPublicKey();
cipher.init(Cipher.ENCRYPT_MODE, pk, new SecureRandom());
byte[] cipherText = cipher.doFinal(input);

person GP32    schedule 21.03.2014    source источник


Ответы (1)


Да, предоставленный вами код выглядит нормально.

Обратите внимание, что если вы замените "RSA/None/PKCS1Padding" на "RSA/ECB/PKCS1Padding", вы можете вместо этого полагаться на поставщика Sun по умолчанию.


Важно отметить, что ваш код генерирует «простую» подпись; он не включает ваши данные или сертификат. Как правило, лучше создать структуру подписанных данных CMS, которая, например, может включите "листовой" сертификат, который вы использовали для создания подписи.

CMS - это так называемый криптографический контейнерный формат, который может содержать такие структуры, как данные, подпись и дополнительную информацию об алгоритме подписи, сертификатах, подписывающей стороне и т. Д.

person Maarten Bodewes    schedule 21.03.2014
comment
И new SecureRandom() тоже в порядке, но может быть опущен. - person Maarten Bodewes; 22.03.2014