Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
А у себя пробовали сначала зашифровать в cryptcp, а потом расшифровать в jcp? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 03.02.2014(UTC) Сообщений: 4 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Ярославль
|
Да попробовал Использовал Ваш пример CMSSignAndEncrypt для создания подписанного и зашифрованного файла. Полученный файл успешно расшифровался, как Вашим примером, так и утилитой. Для шифрования я использовал оригинальный (расшифрованный) файл. Я попытался разобраться в чем разница между файлами от заказчика и моего. Я расшифровал оба файла утилитой cryptcp. После расшифровки файлов оказалось, файл, созданный с помощью вашего примера, это подписанный файл в DER формате, а другой это Base64 файл (----- BEGIN PKCS7 SIGNED ----- ...). Похоже файл зашифрован не тем алгоритмом, который представлен в примере. Но так как файл расшифровывается Вашей утилитой, то он корректный и может быть расшифрован JCP. Возможно, необходимо использовать другие параметры для расшифровки. Ошибка вылетает в самом конце, на этапе получения симметричного ключа, поэтому все параметры для расшифровки к этому моменту уже должны быть известны. Вы можете подсказать, что посмотреть и как изменить код, чтобы расшифровать файл? Спасибо Отредактировано пользователем 5 февраля 2014 г. 9:39:45(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 03.02.2014(UTC) Сообщений: 4 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Ярославль
|
Переслал в личном сообщении
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.04.2014(UTC) Сообщений: 10 Откуда: Киев
Сказал(а) «Спасибо»: 1 раз
|
Автор: vitek-n ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Да попробовал
Использовал Ваш пример CMSSignAndEncrypt для создания подписанного и зашифрованного файла. Полученный файл успешно расшифровался, как Вашим примером, так и утилитой. Для шифрования я использовал оригинальный (расшифрованный) файл.
Я попытался разобраться в чем разница между файлами от заказчика и моего. Я расшифровал оба файла утилитой cryptcp. После расшифровки файлов оказалось, файл, созданный с помощью вашего примера, это подписанный файл в DER формате, а другой это Base64 файл (----- BEGIN PKCS7 SIGNED ----- ...).
Похоже файл зашифрован не тем алгоритмом, который представлен в примере. Но так как файл расшифровывается Вашей утилитой, то он корректный и может быть расшифрован JCP.
Возможно, необходимо использовать другие параметры для расшифровки. Ошибка вылетает в самом конце, на этапе получения симметричного ключа, поэтому все параметры для расшифровки к этому моменту уже должны быть известны.
Вы можете подсказать, что посмотреть и как изменить код, чтобы расшифровать файл?
Спасибо Добрый день. Подскажите, пожалуйста, удалось ли решить проблему? Если да то натолкните на пути решения.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 05.05.2015(UTC) Сообщений: 9
|
Автор: vitek-n ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Ошибка вылетает позже на строке: Код: final SecretKey simmKey = (SecretKey) cipher.unwrap(wrapKey, null, Cipher.SECRET_KEY);
Цитата:04.02.2014 10:21:56 ru.CryptoPro.JCP.tools.Starter check INFO: Loading JCP 1.0.54 36641 04.02.2014 10:21:56 ru.CryptoPro.JCP.tools.Starter check INFO: JCP loaded. Exception in thread "main" java.security.InvalidKeyException: Wrapped key is invalid at ru.CryptoPro.JCP.Key.SecretKeySpec.unwrap(Unknown Source) at ru.CryptoPro.Crypto.Cipher.GostCipher.engineUnwrap(Unknown Source) at ru.CryptoPro.Crypto.Cipher.Padding5Cipher.engineUnwrap(Unknown Source) at javax.crypto.Cipher.unwrap(DashoA13*..) at CMS_samples.CMSDecrypt.main(CMSDecrypt.java:121)
Получаю точно такую же ошибку. Кто-то может помочь разобраться?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Возможно, режим шифрования отличается. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 05.05.2015(UTC) Сообщений: 9
|
Автор: afev ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Возможно, режим шифрования отличается. Код:
protected byte[] decrypt(final byte[] data, final PrivateKey responderKey) throws Exception {
Asn1BerDecodeBuffer dbuf = new Asn1BerDecodeBuffer(data);
final ContentInfo all = new ContentInfo();
all.decode(dbuf);
dbuf.reset();
final EnvelopedData cms = (EnvelopedData) all.content;
KeyTransRecipientInfo keytrans = new KeyTransRecipientInfo();
if (cms.recipientInfos.elements[0].getChoiceID() == RecipientInfo._KTRI)
keytrans =
(KeyTransRecipientInfo) (cms.recipientInfos.elements[0].getElement());
final Asn1BerEncodeBuffer ebuf = new Asn1BerEncodeBuffer();
dbuf = new Asn1BerDecodeBuffer(keytrans.encryptedKey.value);
final GostR3410_KeyTransport encrKey = new GostR3410_KeyTransport();
encrKey.decode(dbuf);
dbuf.reset();
encrKey.sessionEncryptedKey.encode(ebuf);
final byte[] wrapKey = ebuf.getMsgCopy();
ebuf.reset();
encrKey.transportParameters.ephemeralPublicKey.encode(ebuf);
final byte[] encodedPub = ebuf.getMsgCopy();
ebuf.reset();
final byte[] sv = encrKey.transportParameters.ukm.value;
final Gost28147_89_Parameters params =
(Gost28147_89_Parameters) cms.encryptedContentInfo.contentEncryptionAlgorithm.parameters;
final byte[] iv = params.iv.value;
final OID cipherOID = new OID(params.encryptionParamSet.value);
final byte[] text = cms.encryptedContentInfo.encryptedContent.value;
//отправитель - открытый ключ из cms
final X509EncodedKeySpec pspec = new X509EncodedKeySpec(encodedPub);
final KeyFactory kf = KeyFactory.getInstance(JCP.GOST_DH_NAME);
final PublicKey senderPublic = kf.generatePublic(pspec);
// выработка ключа согласования получателем
final KeyAgreement responderKeyAgree =
KeyAgreement.getInstance(JCP.GOST_DH_NAME, CryptoProvider.PROVIDER_NAME);
responderKeyAgree.init(responderKey, new IvParameterSpec(sv), null);
responderKeyAgree.doPhase(senderPublic, true);
final SecretKey responderSecret = responderKeyAgree
.generateSecret("GOST28147");
// Расшифрование симметричного ключа.
final Cipher cipher = Cipher.getInstance(CIPHER_MODE, CryptoProvider.PROVIDER_NAME);
cipher.init(Cipher.UNWRAP_MODE, responderSecret, (SecureRandom) null);
//cipher.init(Cipher.UNWRAP_MODE, responderSecret);
final SecretKey simmKey = (SecretKey) cipher.unwrap(wrapKey, null, Cipher.SECRET_KEY);
// Расшифрование текста на симметричном ключе.
final GostCipherSpec spec = new GostCipherSpec(iv, cipherOID);
cipher.init(Cipher.DECRYPT_MODE, simmKey, spec, null);
return cipher.doFinal(text, 0, text.length);
}
Вот так расшифровываю данные. Подскажите пожалуйста, как тут можно изменить режим?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Вы уверены, что используете правильный ключ (responderKey)? Попробуйте расшифровать с помощью EnvelopedSignature из CAdES.jar, примеры есть в samples-sources.jar, в пакете CAdES/enveloped, описание в CAdES-javadoc.jar (JCP 2.0). Коротко - как-то так: Код:
ByteArrayOutputStream decryptedByteDataStream = new ByteArrayOutputStream();
EnvelopedSignature signature = new EnvelopedSignature(new ByteArrayInputStream(<зашифрованное сообщение>));
signature.decrypt(<сертификат получателя>, <закрытый ключ получателя - responderKey>, decryptedByteDataStream);
byte[] decryptedData = decryptedByteDataStream.toByteArray();
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 05.05.2015(UTC) Сообщений: 9
|
Автор: afev ![Перейти к цитате Перейти к цитате](/forum2/Themes/soclean/icon_latest_reply.gif) Вы уверены, что используете правильный ключ (responderKey)? Попробуйте расшифровать с помощью EnvelopedSignature из CAdES.jar, примеры есть в samples-sources.jar, в пакете CAdES/enveloped, описание в CAdES-javadoc.jar (JCP 2.0). Коротко - как-то так: Код:
ByteArrayOutputStream decryptedByteDataStream = new ByteArrayOutputStream();
EnvelopedSignature signature = new EnvelopedSignature(new ByteArrayInputStream(<зашифрованное сообщение>));
signature.decrypt(<сертификат получателя>, <закрытый ключ получателя - responderKey>, decryptedByteDataStream);
byte[] decryptedData = decryptedByteDataStream.toByteArray();
Есть другая возможность проверить? Лицензия на 2.0 версию закончилась и нет возможности запустить этот пример. Но в ключе уверен. Сверял серийные номера сертификата на который были зашифрованы данные и тот что я использую.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close