Atom Лента - Форум КриптоПро - Тема:Как подписать строчку с помощью Java JCP - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:Kakpodpisat'strochkuspomoshch'juJavaJCP-10:1Copyright 2024 Форум КриптоПро2024-03-28T20:29:43Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.ruaxlminyaevhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59189&name=axlminyaevaxlminyaevhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59189&name=axlminyaevЕвгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений Афанасьевaxlminyaevhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59189&name=axlminyaevЕвгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений Афанасьевaxlminyaevhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=59189&name=axlminyaevYetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid124281:1Как подписать строчку с помощью Java JCP<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо! Нашел решение вот тут <a rel="nofollow" href="https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=119240#post119240" title="https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=119240#post119240">https://www.cryptopro.ru...&m=119240#post119240</a></td></tr></table>2021-04-19T14:28:45+03:002021-04-19T14:28:45+03:00axlminyaev<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо! Нашел решение вот тут <a rel="nofollow" href="https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=119240#post119240" title="https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=119240#post119240">https://www.cryptopro.ru...&m=119240#post119240</a></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124279:1Как подписать строчку с помощью Java JCP<table class="content postContainer" width="100%"><tr><td>Он и не будет совпадать - подписи в любом случае будут отличаться.</td></tr></table>2021-04-19T13:50:56+03:002021-04-19T13:50:56+03:00Евгений Афанасьев<table class="content postContainer" width="100%"><tr><td>Он и не будет совпадать - подписи в любом случае будут отличаться.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124272:1Как подписать строчку с помощью Java JCP<table class="content postContainer_Alt" width="100%"><tr><td><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-java">
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())))
</code></pre>
</div></div><br /><br />Результат все равно отличается от <a rel="nofollow" href="https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html" title="https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html">https://www.cryptopro.ru...ge/cades_bes_sample.html</a></td></tr></table>2021-04-19T10:33:23+03:002021-04-19T10:33:23+03:00axlminyaev<table class="content postContainer_Alt" width="100%"><tr><td><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-java">
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())))
</code></pre>
</div></div><br /><br />Результат все равно отличается от <a rel="nofollow" href="https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html" title="https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html">https://www.cryptopro.ru...ge/cades_bes_sample.html</a></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124271:1Как подписать строчку с помощью Java JCP<table class="content postContainer" width="100%"><tr><td>Установить JCP + CAdES, в хранилище JRE/lib/security/cacerts установить корневой сертификат цепочки подписанта, примерный код на основе SignExample из samples-sources.jar/CAdES для создания CAdES-BES подписи:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-java">
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 подпись
</code></pre>
</div></div><br />Подробнее можно узнать в документации разработчика в папке Doc дистрибутива или поискать на форуме.</td></tr></table>2021-04-18T22:54:20+03:002021-04-18T22:54:20+03:00Евгений Афанасьев<table class="content postContainer" width="100%"><tr><td>Установить JCP + CAdES, в хранилище JRE/lib/security/cacerts установить корневой сертификат цепочки подписанта, примерный код на основе SignExample из samples-sources.jar/CAdES для создания CAdES-BES подписи:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-java">
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 подпись
</code></pre>
</div></div><br />Подробнее можно узнать в документации разработчика в папке Doc дистрибутива или поискать на форуме.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid124270:1Как подписать строчку с помощью Java JCP<table class="content postContainer_Alt" width="100%"><tr><td>Как подписать строчку с помощью Java JCP, чтобы получился аналогичный результат как и на сайте <a rel="nofollow" href="https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html?" title="https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html?">https://www.cryptopro.ru...e/cades_bes_sample.html?</a><br />Нужен пример кода. Я попробовал следующий вариант, но что-то здесь не так. <br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br /> val keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME, JCP.PROVIDER_NAME);<br /> keyStore.load(null, null)<br /> val sig: Signature = Signature.getInstance(JCP.GOST_SIGN_DH_2012_256_NAME, JCP.PROVIDER_NAME)<br /> val keyStoreAliasEnum = keyStore.aliases()<br /> val alias = "Some alias"<br /> val privateKey = keyStore.getKey(alias, "some password".toCharArray()) as PrivateKey<br /> val cert= keyStore.getCertificate(alias)<br /> sig.initSign(privateKey)<br /> val data = "Some data".toByteArray()<br /> sig.update(data)<br /> val signatureBytes = sig.sign()<br /><br /> println(Base64.getEncoder().encode(cert.encoded + signatureBytes).decodeToString()) //результат подписи<br /></div></div></td></tr></table>2021-04-18T22:44:54+03:002021-04-18T22:44:54+03:00axlminyaev<table class="content postContainer_Alt" width="100%"><tr><td>Как подписать строчку с помощью Java JCP, чтобы получился аналогичный результат как и на сайте <a rel="nofollow" href="https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html?" title="https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html?">https://www.cryptopro.ru...e/cades_bes_sample.html?</a><br />Нужен пример кода. Я попробовал следующий вариант, но что-то здесь не так. <br /><br /><div class="quote"><span class="quotetitle">Цитата:</span><blockquote><br /> val keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME, JCP.PROVIDER_NAME);<br /> keyStore.load(null, null)<br /> val sig: Signature = Signature.getInstance(JCP.GOST_SIGN_DH_2012_256_NAME, JCP.PROVIDER_NAME)<br /> val keyStoreAliasEnum = keyStore.aliases()<br /> val alias = "Some alias"<br /> val privateKey = keyStore.getKey(alias, "some password".toCharArray()) as PrivateKey<br /> val cert= keyStore.getCertificate(alias)<br /> sig.initSign(privateKey)<br /> val data = "Some data".toByteArray()<br /> sig.update(data)<br /> val signatureBytes = sig.sign()<br /><br /> println(Base64.getEncoder().encode(cert.encoded + signatureBytes).decodeToString()) //результат подписи<br /></div></div></td></tr></table>