Создание сертификата и закрытого ключа
public static byte[] encryptData(byte[] data, X509Certificate encryptionCertificate) throws CertificateEncodingException, CMSException, IOException {
byte[] encryptedData = null;
if (null != data && null != encryptionCertificate) {
CMSEnvelopedDataGenerator cmsEnvelopedDataGenerator
= new CMSEnvelopedDataGenerator();
JceKeyTransRecipientInfoGenerator jceKey
= new JceKeyTransRecipientInfoGenerator(encryptionCertificate);
cmsEnvelopedDataGenerator.addRecipientInfoGenerator(transKeyGen);
CMSTypedData msg = new CMSProcessableByteArray(data);
OutputEncryptor encryptor
= new JceCMSContentEncryptorBuilder(CMSAlgorithm.AES128_CBC)
.setProvider("BC").build();
CMSEnvelopedData cmsEnvelopedData = cmsEnvelopedDataGenerator
.generate(msg,encryptor);
encryptedData = cmsEnvelopedData.getEncoded();
}
return encryptedData;}
Создание объекта JceKeyTransRecipientInfoGenerator с использованием сертификата получателя.
Затем создание нового объекта CMSEnvelopedDataGenerator и добавление в него генератора информации о получателе.
Затем используйте класс JceCMSContentEncryptorBuilder для создания объекта OutputEncrytor с использованием алгоритма AES CB C.
Шифтор используется позже для создания объекта CMSEnvelopedData, который инкапсулирует зашифрованное сообщение.
Наконец, закодированное представление конверта возвращается в виде байтового массива.
Получить окончательный байтовый массив, записанный в файл.