Статус: Новичок
Группы: Участники
Зарегистрирован: 18.04.2021(UTC) Сообщений: 5
Сказал(а) «Спасибо»: 3 раз
|
Как подписать строчку с помощью Java JCP, чтобы получился аналогичный результат как и на сайте https://www.cryptopro.ru...e/cades_bes_sample.html?Нужен пример кода. Я попробовал следующий вариант, но что-то здесь не так. Цитата: val keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME, JCP.PROVIDER_NAME); keyStore.load(null, null) val sig: Signature = Signature.getInstance(JCP.GOST_SIGN_DH_2012_256_NAME, JCP.PROVIDER_NAME) val keyStoreAliasEnum = keyStore.aliases() val alias = "Some alias" val privateKey = keyStore.getKey(alias, "some password".toCharArray()) as PrivateKey val cert= keyStore.getCertificate(alias) sig.initSign(privateKey) val data = "Some data".toByteArray() sig.update(data) val signatureBytes = sig.sign()
println(Base64.getEncoder().encode(cert.encoded + signatureBytes).decodeToString()) //результат подписи
Отредактировано пользователем 18 апреля 2021 г. 22:44:54(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,964 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Установить JCP + CAdES, в хранилище JRE/lib/security/cacerts установить корневой сертификат цепочки подписанта, примерный код на основе SignExample из samples-sources.jar/CAdES для создания CAdES-BES подписи: Код:
KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME); // хранилище ключей
keyStore.load(null, null);
PrivateKey signerPrivateKey = keyStore.getKey(alias, password); // получение закрытого ключа
X509Certificate signerCert = (X509Certificate)keyStore.getCertificate(alias); // получение сертификата подписи
List<X509Certificate> signerCertificateChain = Collections.singletonList(signerCert); // список из сертификата подписи
CAdESSignature cadesSignature = new CAdESSignature(detached); // создание подписи - отделенной или совмещенной
List<X509CertificateHolder> certHolderList = new ArrayList<>();
certHolderList.add(new X509CertificateHolder(signerCert));
CollectionStore certStore = new CollectionStore(certHolderList);
cadesSignature.setCertificateStore(certStore); // добавление сертификата подписи в подпись
cadesSignature.addSigner(JCP.PROVIDER_NAME, null, null, signerPrivateKey, signerCertificateChain, CAdESType.CAdES_BES, null, false, null, null, null); // добавление подписанта CAdES-BES
ByteArrayOutputStream outSignatureStream = new ByteArrayOutputStream(); // поток для получения сформированной подписи
cadesSignature.open(outSignatureStream);
cadesSignature.update(<данные>); // подпись данных
cadesSignature.close();
outSignatureStream.close();
byte[] signature = outSignatureStream.toByteArray(); // CAdES-BES подпись
Подробнее можно узнать в документации разработчика в папке Doc дистрибутива или поискать на форуме. Отредактировано пользователем 18 апреля 2021 г. 22:54:20(UTC)
| Причина: Не указана |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 18.04.2021(UTC) Сообщений: 5
Сказал(а) «Спасибо»: 3 раз
|
Код:
val keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
keyStore.load(null, null)
val signerPrivateKey = keyStore.getKey(alias, password.toCharArray()) as PrivateKey
val signerCert = keyStore.getCertificate(alias) as X509Certificate
val signerCertificateChain = Collections.singletonList(signerCert)
val cadesSignature = CAdESSignature(true)
val certHolderList = mutableListOf(X509CertificateHolder(signerCert.encoded))
val certStore = CollectionStore(certHolderList)
cadesSignature.setCertificateStore(certStore); // добавление сертификата подписи в подпись
cadesSignature.addSigner(
JCP.PROVIDER_NAME, null, null, signerPrivateKey, signerCertificateChain,
CAdESType.CAdES_BES, null, false, null, null, null
); // добавление подписанта CAdES-BES
val outSignatureStream = ByteArrayOutputStream(); // поток для получения сформированной подписи
cadesSignature.open(outSignatureStream);
cadesSignature.update(data.toByteArray()); // подпись данных
cadesSignature.close();
outSignatureStream.close();
println(String(Base64.getEncoder().encode(outSignatureStream.toByteArray())))
Результат все равно отличается от https://www.cryptopro.ru...ge/cades_bes_sample.htmlОтредактировано пользователем 19 апреля 2021 г. 10:33:23(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,964 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Он и не будет совпадать - подписи в любом случае будут отличаться. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 18.04.2021(UTC) Сообщений: 5
Сказал(а) «Спасибо»: 3 раз
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close