Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline axlminyaev  
#1 Оставлено : 18 апреля 2021 г. 22:33:05(UTC)
axlminyaev

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 18 апреля 2021 г. 22:53:19(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Установить 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)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
axlminyaev оставлено 19.04.2021(UTC)
Offline axlminyaev  
#3 Оставлено : 19 апреля 2021 г. 10:14:23(UTC)
axlminyaev

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 19 апреля 2021 г. 13:50:56(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Он и не будет совпадать - подписи в любом случае будут отличаться.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
axlminyaev оставлено 19.04.2021(UTC)
Offline axlminyaev  
#5 Оставлено : 19 апреля 2021 г. 14:27:44(UTC)
axlminyaev

Статус: Новичок

Группы: Участники
Зарегистрирован: 18.04.2021(UTC)
Сообщений: 5

Сказал(а) «Спасибо»: 3 раз
Спасибо! Нашел решение вот тут https://www.cryptopro.ru...&m=119240#post119240

Отредактировано пользователем 19 апреля 2021 г. 14:28:45(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.