Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.11.2012(UTC) Сообщений: 77 Откуда: Тольятти
|
есть код, генерируемые файлы не проходят проверку на сайте http://notary.cryptopro.ru/Detached.aspxно программно проверка не проходит не подскажете что не так? ......... как программно узнать в какой кодировке подпись? Код: final PrivateKey[] PrivKeys = new PrivateKey[2];
RutokenStore = KeyStore.getInstance("RutokenStore");
RutokenStore.load(null, null);
System.out.println("size()="+RutokenStore.size());// если 0 то ключа нет
if (RutokenStore.size() > 0){
char[] SIGN_KEY_PASSWORD = {'1'};
PrivKeys[1] =(PrivateKey) RutokenStore.getKey("XX",SIGN_KEY_PASSWORD);
// X509Certificate c = (X509Certificate) RutokenStore.getCertificate("XX");
Certificate cert = RutokenStore.getCertificate("XX");
PublicKey publicKey2012 = cert.getPublicKey();
// подписываем SAMPLE_TEXT //* Создание подписи "GOST3411withGOST3410EL"
final Signature sig = Signature.getInstance(Constants.SIGN_EL_ALG);
sig.initSign(PrivKeys[1]);
sig.update(SAMPLE_TEXT.getBytes());
final byte[] signEL = sig.sign();
Array.writeFile("F:/J_crypto_sample/CMS_samples2/data/sig1.sig", signEL);
Array.writeFile("F:/J_crypto_sample/CMS_samples2/data/data1.dat", SAMPLE_TEXT.getBytes());
// проверка подписи
final Signature sigVerify = Signature.getInstance(Constants.SIGN_EL_ALG);
sigVerify.initVerify(publicKey2012);
// sigVerify.initVerify(publicKey2011);
sigVerify.update(SAMPLE_TEXT.getBytes());
final boolean signELver = sigVerify.verify(signEL);
System.out.println("Signature verifies (signEL) is: " + signELver);
System.out.println("sigVerify.getAlgorithm(): " + sigVerify.getAlgorithm());
System.out.println("sigVerify.getProvider(): " + sigVerify.getProvider());
}
Код:30.11.2012 12:08:32 ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 1.0.53
30.11.2012 12:08:32 ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
size()=2
30.11.2012 12:08:34 ru.CryptoPro.JCP.tools.AbstractLicense checkSerialHash
INFO: Check license without company name: true
Signature verifies (signEL) is: true
sigVerify.getAlgorithm(): GOST3411withGOST3410EL
sigVerify.getProvider(): JCP version 1.0
Вложение(я):  data1.dat (1kb) загружен 5 раз(а). sig1.sig (1kb) загружен 6 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,753   Сказал «Спасибо»: 579 раз Поблагодарили: 2307 раз в 1807 постах
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.11.2012(UTC) Сообщений: 77 Откуда: Тольятти
|
а есть возможность программно определить какой тип подписи на входе? и выдать сообщение пользователю .....
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,753   Сказал «Спасибо»: 579 раз Поблагодарили: 2307 раз в 1807 постах
|
Oleg_tgl написал:а есть возможность программно определить какой тип подписи на входе? и выдать сообщение пользователю .....
Есть |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.11.2012(UTC) Сообщений: 77 Откуда: Тольятти
|
а как? :-)
может гдето в самплах есть пример
подскажите плиз
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,027  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 727 раз в 685 постах
|
Например, пробуйте декодировать подпись, предполагая, что это PKCS7: Код:
// Из примера samples.jar, CMS_samples/CMSVerify
final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(buffer);
final ContentInfo all = new ContentInfo();
all.decode(asnBuf);
Если декодировалась, то это PKCS7, иначе подпись неправильного (неподходящего) формата. Отредактировано пользователем 30 ноября 2012 г. 15:51:02(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,753   Сказал «Спасибо»: 579 раз Поблагодарили: 2307 раз в 1807 постах
|
afev написал:Например, пробуйте декодировать подпись, предполагая, что это PKCS7: Код:
// Из примера samples.jar, CMS_samples/CMSVerify
final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(buffer);
final ContentInfo all = new ContentInfo();
all.decode(asnBuf);
Иначе подпись неправильного (неподходящего) формата. + проверить размер "подписи" и если 64 байт - то проверять по алгоритму и первого сообщения |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.11.2012(UTC) Сообщений: 77 Откуда: Тольятти
|
здесь она естественно выдает ошибку, и как тогда понять что у меня на входе? или подобные подписи не используются? Код: // проверка подписи
final Signature sigVerify = Signature.getInstance(Constants.SIGN_EL_ALG);
sigVerify.initVerify(publicKey2012);
// sigVerify.initVerify(publicKey2011);
sigVerify.update(SAMPLE_TEXT.getBytes());
final boolean signELver = sigVerify.verify(signEL);
System.out.println("Signature verifies (signEL) is: " + signELver);
System.out.println("sigVerify.getAlgorithm(): " + sigVerify.getAlgorithm());
System.out.println("sigVerify.getProvider(): " + sigVerify.getProvider());
final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(signEL);
final ContentInfo all = new ContentInfo();
try {
all.decode(asnBuf);
System.out.println("contentType================"+all.contentType.value);
} catch (Asn1Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Код:com.objsys.asn1j.runtime.Asn1TagMatchFailedException: ASN.1 decode error @ offset 0:
Tag match failed: expected [UNIVERSAL 16], parsed [19]
at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:449)
at com.objsys.asn1j.runtime.Asn1Type.matchTag(Asn1Type.java:466)
at ru.CryptoPro.JCP.ASN.CryptographicMessageSyntax.ContentInfo.decode(ContentInfo.java:55)
at com.objsys.asn1j.runtime.Asn1Type.decode(Asn1Type.java:218)
at CMS_samples.test_3.main(test_3.java:69)
sigVerify.getProvider(): JCP version 1.0
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,753   Сказал «Спасибо»: 579 раз Поблагодарили: 2307 раз в 1807 постах
|
Oleg_tgl написал:здесь она естественно выдает ошибку, и как тогда понять что у меня на входе? или подобные подписи не используются?
1. Проверять размер, если 64 байта - это не pkcs7 + нужен публичный ключ для проверки 2. Пробовать декодировать и проверять |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 22.11.2012(UTC) Сообщений: 77 Откуда: Тольятти
|
дико извиняюсь, :-) этого будет достаточно или еще какаято поверка нужна Код:
System.out.println("signEL="+signEL.length);
if (signEL.length!=64){//если 64 - это не pkcs7
//Требования к форматам проверяемых сертификатов и электронных документов
//http://notary.cryptopro.ru/Notary_Help.htm
//приказом Министерства связи и массовых коммуникаций Российской Федерации от 23.03.2009 № 41
// "Требования к технологиям, форматам, протоколам информационного взаимодействия,
// унифицированным программно-техническим средствам подсистемы удостоверяющих центров
// общероссийского государственного информационного центра"
final Asn1BerDecodeBuffer asnBuf = new Asn1BerDecodeBuffer(signEL);
final ContentInfo all = new ContentInfo();
try {
all.decode(asnBuf);
System.out.println("contentType================"+all.contentType.value);
} catch (Asn1Exception e) {
System.out.println("это не pkcs7");
e.printStackTrace();
}
} else {System.out.println("это не pkcs7");}
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close