Статус: Участник
Группы: Участники
Зарегистрирован: 14.05.2010(UTC) Сообщений: 10
|
Подпись формируется с помощью "КриптоАРМ" в кодировке DER. Подпись математически верная. Проверка подписи производится с помощью следующего кода: Код:
Security.insertProviderAt(new BouncyCastleProvider(),1);
Provider[] prvs=Security.getProviders();
for(Provider prv:prvs){
System.out.println(prv);
}
FileInputStream fis = new FileInputStream(sign_path);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Collection c = cf.generateCertificates(fis);
Iterator i = c.iterator();
X509Certificate cert=null;
if (i.hasNext()) {
cert = (X509Certificate) i.next();
System.out.println(cert);
}
fis.close();
PublicKey publicKey=cert.getPublicKey();
Signature sig_bc=Signature.getInstance(cert.getSigAlgName(), BouncyCastleProvider.PROVIDER_NAME);
sig_bc.initVerify(publicKey);
System.out.println(sig_bc);
FileInputStream my_file=new FileInputStream(file_path);
while(my_file.available()>0){
byte symb=(byte)my_file.read();
sig_bc.update(symb);
}
System.out.println();
my_file.close();
sig_bc.verify(cert.getSignature());
Все выполняется без ошибок, но подпись оказывается неверная. Если использовать для проверки КриптоПро JCP, то она также является неверной. Порядок байт менял, не помогает. В чем может быть проблема? Что надо сделать, чтобы "правильно" проверить истинность подписи? Вопрос по поводу считывания файла подписи в base64 кодировке задал в соответствующей теме.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.10.2008(UTC) Сообщений: 181
|
Вопрос про неработающий провайдер BouncyCastle лучше задать на их форуме
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.05.2010(UTC) Сообщений: 10
|
если Вы не заметили, я написал, что "КриптоПро JCP" также выдает, что подпись неверная. именно поэтому задаю этот вопрос на этом форуме. могу прикрепить совершенно аналогичный кусок кода, где используется провайдер JCP.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.10.2008(UTC) Сообщений: 181
|
Вы проверяете подпись под сертификатом? Цитата:sig_bc.verify(cert.getSignature()); Уверены, что содержимое file_path соответствует подписываемым полям сертификата?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.05.2010(UTC) Сообщений: 10
|
нет. а что именно кроме файла подписывается? возможно ли получить подписанные данные из файла в der-кодировке через стандартный интерфейс, предоставляемый java?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.10.2008(UTC) Сообщений: 181
|
В Java подписывается то, что передается в update, и проверяется тоже. Подпись выдается sign() и проверяется в verify "чистая" (64 байта для гост). Файла в der-кодировке, скорее всего, означает подпись в формате CMS. Получить подписанные данные из него средствами JCA нельзя. Их там может вообще не быть.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.05.2010(UTC) Сообщений: 10
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close