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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Дмитрий19891  
#1 Оставлено : 14 марта 2019 г. 15:37:19(UTC)
Дмитрий19891

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

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

Сказал(а) «Спасибо»: 1 раз
При переходе с JCP 2.0 на Java CSP (JCSP), установленную на чистую Java 8
перестал работать метод расшифровки.

Provider provider = Security.getProvider("JCSP");
keyStore = KeyStore.getInstance("FAT12_D",provider);
keyStore.load(null, null);
gg = "superkey";
char[] parol = new char[1];
Key key = keyStore.getKey(gg, parol);

XMLCipher xmlCipher2 = XMLCipher.getInstance();
xmlCipher2.init(XMLCipher.DECRYPT_MODE, null);
Element encKeyElem = (Element) doc2.getElementsByTagName("xenc:EncryptedKey").item(0);
Element encryptedDataElement2 = (Element) doc2.getElementsByTagNameNS(EncryptionConstants.EncryptionSpecNS, EncryptionConstants._TAG_ENCRYPTEDDATA).item(0);
EncryptedKey encKey = xmlCipher2.loadEncryptedKey(doc2, encKeyElem);
EncryptedData encData = xmlCipher2.loadEncryptedData(doc2, encryptedDataElement2);

XMLCipher keyCipher22 = XMLCipher.getInstance(Consts.URI_GOST_TRANSPORT);
keyCipher22.init(XMLCipher.UNWRAP_MODE, key);
Key sKey = keyCipher22.decryptKey(encKey, encData.getEncryptionMethod().getAlgorithm());

xmlCipher2.init(XMLCipher.DECRYPT_MODE, sKey);
xmlCipher2.doFinal(doc2, encryptedDataElement2);

Мог уже подпортить после бесконечных попыток, но в итоге на doFinal всегда прихожу к стэктрейсу:

org.apache.xml.security.encryption.XMLEncryptionException: ru.CryptoPro.JCSP.Key.GostSecretKey cannot be cast to ru.CryptoPro.Crypto.Key.GostSecretKey
Original Exception was java.security.InvalidKeyException: ru.CryptoPro.JCSP.Key.GostSecretKey cannot be cast to ru.CryptoPro.Crypto.Key.GostSecretKey
at org.apache.xml.security.encryption.XMLCipher.decryptToByteArray(XMLCipher.java:1859)
at org.apache.xml.security.encryption.XMLCipher.decryptElement(XMLCipher.java:1715)
at org.apache.xml.security.encryption.XMLCipher.doFinal(XMLCipher.java:944)
at fssw.FSSServiceHandler.StartDecrypt(FSSServiceHandler.java:739)
at fssw.FSSServiceHandler.handleMessage(FSSServiceHandler.java:183)
at fssw.FSSServiceHandler.handleMessage(FSSServiceHandler.java:74)
at com.sun.xml.internal.ws.handler.HandlerProcessor.callHandleMessageReverse(HandlerProcessor.java:326)
at com.sun.xml.internal.ws.handler.HandlerProcessor.callHandlersResponse(HandlerProcessor.java:199)
at com.sun.xml.internal.ws.handler.ClientSOAPHandlerTube.callHandlersOnResponse(ClientSOAPHandlerTube.java:148)
at com.sun.xml.internal.ws.handler.HandlerTube.processResponse(HandlerTube.java:159)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:1132)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:1035)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:1004)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:862)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:448)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:178)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:93)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:77)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:147)
at com.sun.proxy.$Proxy37.getPrivateLNData(Unknown Source)

Отредактировано пользователем 14 марта 2019 г. 15:56:36(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 14 марта 2019 г. 18:03:28(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Сделайте JCSP провайдером по умолчанию в алгоритмах панели управления jcp.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Дмитрий19891 оставлено 15.03.2019(UTC)
Offline Дмитрий19891  
#3 Оставлено : 15 марта 2019 г. 9:02:24(UTC)
Дмитрий19891

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

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

Сказал(а) «Спасибо»: 1 раз
Действительно помогло. Хотя я вроде не глупее паровоза и при установке указывал основным провайдером JCSP
Offline Евгений Афанасьев  
#4 Оставлено : 15 марта 2019 г. 9:08:34(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
API для шифрования слишком высокоуровневое (XMLCipher), у него нет возможности указать провайдер, как у аналогичных Cipher из JCE, внутри используются классы и методы без указания провайдера, т.е. с любым провайдером из списка, реализующим необходимые алгоритмы, поэтому единственный выход - поместить нужный провайдер в начало списка, что происходит при установке JCSP провайдером по умолчанию (он в java.security помещается первым, перед JCP).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.