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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline YuidnAO  
#1 Оставлено : 24 октября 2025 г. 13:31:30(UTC)
YuidnAO

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

Группы: Участники
Зарегистрирован: 24.10.2025(UTC)
Сообщений: 1
Российская Федерация
Откуда: Барнаул

Добрый день. Пытаюсь подписать Data для работы с api ЧЗ.

static void main() throws IOException, KeyStoreException, NoSuchProviderException, CertificateException, NoSuchAlgorithmException, UnrecoverableKeyException, SignatureException, InvalidKeyException {
String password = "12345678";
String keyAlias = "Иванов Иван Иваныч";

InputStream privateKeyInputStream = new FileInputStream("file.pfx");

//загружаю в хранилище ключей подпись
KeyStore keyStore = KeyStore.getInstance(JCSP.PFX_STORE_NAME, JCSP.PROVIDER_NAME);
keyStore.load(privateKeyInputStream, password.toCharArray());

//получил закрытый ключ из подписи
PrivateKey privateKey = (PrivateKey) keyStore.getKey(keyAlias, password.toCharArray());
System.out.println("privateKey " + privateKey.toString());
//получил сертификат
var cert = keyStore.getCertificate(keyAlias);
byte [] data = "sss-ssss-ssss".getBytes(); // то, что нужно подписать

//создал подпись
Signature sig = Signature.getInstance(JCP.GOST_SIGN_2012_256_NAME); // создал подпись с этой константой, потому что в сертификате из file.pfx увидел это GOST3411_2012_256withGOST3410_2012_256

//инициализировал
sig.initSign(privateKey);
byte[] signatureBytes = sig.sign();
String combined = Base64.getEncoder().encodeToString(cert.getEncoded())+
Base64.getEncoder().encodeToString(signatureBytes);
System.out.println("Combined: " + combined);}

Подскажите, почему подпись не валидна? искренне пытался сам найти ответ в руководстве и в темах на форуме, но уже не понимаю сам куда копать и что не так делаю
Offline Евгений Афанасьев  
#2 Оставлено : 24 октября 2025 г. 13:55:43(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 738 раз в 696 постах
Добрый день.

Возможно, вам нужна не "голая" подпись (64 байта), а, например, CMS или CAdES? Тогда подписывать надо не данные, а атрибуты.
В samples-sources.jar есть примеры: в пакете CMS - низкоуровневые, в CAdES - высокоуровневые.
Посмотрите пример digital_marking.DigitalMarkingExample в samples-sources.jar.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.