Статус: Участник
Группы: Участники
Зарегистрирован: 29.11.2021(UTC) Сообщений: 23
Сказал(а) «Спасибо»: 10 раз Поблагодарили: 2 раз в 1 постах
|
Здравствуйте! Для шифрования данных сертификатом открытого ключа получателя зашифрованных данных использовали пример из файла: "..\jcp-2.0.41940-A\samples-sources\CMS_samples\PKCS7EnvEphTransport.java". Теперь возникла потребность шифровать данные на несколько сертификатов открытого ключа. Например, при смене сертификата открытого ключа (истекает срок действия) получателем зашифрованных данных, можно было бы некоторое время (период перехода на новый сертификат открытого ключа) шифровать обеими сертификатами открытого ключа получателя зашифрованных данных. Подскажите пожалуйста пример такого кода (в "..\jcp-2.0.41940-A\samples-sources\" найти не удалось). Или, если такого примера кода нет, подскажите как модифицировать пример шифрования из файла "..\jcp-2.0.41940-A\samples-sources\CMS_samples\PKCS7EnvEphTransport.java", таким образом чтобы была возможность зашифровать данные с использованием нескольких сертификатов открытого ключа. А расшифровать такие зашифрованные данные можно было бы любым из закрытых ключей, соответствующих этим открытым ключам. Отредактировано пользователем 5 месяцев назад
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 29.11.2021(UTC) Сообщений: 23
Сказал(а) «Спасибо»: 10 раз Поблагодарили: 2 раз в 1 постах
|
Реализовано как в примере из Руководства разработчика на странице 70: Код:
ByteArrayOutputStream envelopedByteArrayOutStream = new ByteArrayOutputStream();
EnvelopedSignature signature = new EnvelopedSignature();
signature.addKeyTransRecipient(recipientCertificate);
signature.open(envelopedByteArrayOutStream);
byte[] data = ...
signature.update(data, 0, data.length);
signature.close();
byte[] envelopedByteData = envelopedByteArrayOutStream.toByteArray();
Пример расшифрования сообщения получателем.
ByteArrayOutputStream decryptedByteDataStream = new ByteArrayOutputStream();
byte[] envelopedByteData = ...
signature = new EnvelopedSignature(new ByteArrayInputStream(envelopedByteData));
signature.decrypt(recipientCertificate, recipientPrivateKey, decryptedByteDataStream);
byte[] decryptedByteData = decryptedByteDataStream.toByteArray();
Множество сертификатов получателя (по одному) добавляется оператором: Код:...
signature.addKeyTransRecipient(recipientCertificate);
...
Подобный код можно посмотреть в примерах "..\jcp-2.0.41940-A\samples-sources.jar\CAdES\enveloped\EnvelopedDataAsStreamExample.java" и "..\jcp-2.0.41940-A\samples-sources.jar\CAdES\enveloped\EnvelopedDataAsByteArrayExample.java" Важно, чтобы загрузка провайдеров Код:
Security.addProvider(new JCP());
Security.addProvider(new CryptoProvider());
Security.addProvider(new RevCheck());
JCPInit.initProviders(false);
CAdESUtility.initJCPAlgorithms();
выполнялась раньше загрузки сертификатов открытого ключа (сертификаты получателя, на которых выполняется шифрование) из хранилища сертификатов. Отредактировано пользователем 5 месяцев назад
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,223  Сказал(а) «Спасибо»: 101 раз Поблагодарили: 290 раз в 270 постах
|
Добрый день! Код:
...
for (X509Certificate walk : certs)
envelopedSignature.addKeyAgreeRecipient(walk);
...
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close