Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.01.2008(UTC) Сообщений: 207
Поблагодарили: 3 раз в 3 постах
|
для подписи/проверки подписи файла с хешем, надо использовать код: Код:public static void main(String[] args) throws Exception {
//csptest -keys -hash GOST -in e:\text -hashout e:\text.hsh
//csptest.exe -keyset -sign GOST -container 111 -in e:\text.hsh -out e:\text.hsh.sign -keytype exchange
final byte[] buffer = Array.readFile("E:\\text.hsh");
final byte[] sig = Array.readFile("E:\\text.hsh.sign");
final CertificateFactory cf = CertificateFactory.getInstance("X509");
final Certificate cert =
cf.generateCertificate(new FileInputStream("E:\\111.cer"));
final PublicKey pub = cert.getPublicKey();
//var 1
final Signature sss = Signature.getInstance(JCP.CRYPTOPRO_SIGN_NAME,
JCP.PROVIDER_NAME);
sss.initVerify(pub);
sss.update(buffer);
final boolean verifies = sss.verify(sig);
System.out.println("signature verifies: " + verifies);
if (!verifies) {
throw new Exception("Signature was not verified");
}
//var 2
final Signature ss = Signature.getInstance(JCP.GOST_EL_SIGN_NAME,
JCP.PROVIDER_NAME);
ss.initVerify(pub);
ss.update(buffer);
final byte[] invSig = Array.invByteOrderB(sig);
final boolean verif = ss.verify(invSig);
System.out.println("signature verifies: " + verif);
if (!verif) {
throw new Exception("Signature was not verified");
}
}
ps: Пишите один try {} catch {} на весь код функции. Строку с ошибкой скажет e.printStackTrace(). Отредактировано пользователем 29 мая 2008 г. 14:40:51(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 26.05.2008(UTC) Сообщений: 23 Откуда: Москва
|
Строка в вашем примере "csptest -keys -hash GOST -in e:\text -hashout e:\text.hsh" у меня лично не работает нормально, вылетает окошко с просьбой выбрать ключевой носитель, в ключевом носителе что только не выбираю - толку нет, один только вопрос - нафига козе баян ? (для генерации хеша зачем ключевой носитель и байда с окошками ?).
В общем пример ваш использовать нет возможности. Да и потом в моем примере кода, всё тоже самое, не пойму зачем одно и тоже переписывать не один раз.
И пожалуйста не предлагайте использовать для генерации всякую ерунду типа csptest который мало того что не работает по человечески, ко всему этому мы ещё и пишем на языке Java, поэтому давайте им и ограничимся.
Скажите лучше в чем причина ? Как решить ?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.01.2008(UTC) Сообщений: 207
Поблагодарили: 3 раз в 3 постах
|
Если бы все сделали правильно, то все работало бы. отличие подписи в JCP и CSP только в этом: olin написал:Detached-подпись JCP имеет инверсный порядок байт по сравнению с CSP.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,431
Сказал(а) «Спасибо»: 37 раз Поблагодарили: 574 раз в 400 постах
|
Окошко с просьбой выбрать ключевоей носитель возникает в случае, если не создан контейнер по умолчанию. Операцию хеширования можно делать и на verify_context, тогда окошек не будет: csptest -keys -hash GOST -in e:\text -hashout e:\text.hsh -verifycontext
P.S. Если вам говорят использовать csptest, значит есть подозрения, что вы наделали ошибок не только на Java, но и на Си. Ваш код очень плохо оформлен, поэтому искать в нём ошибку ни у кого нет желания. Вместо этого вам предалгают простое и правильное решение, поняв которое вы сами найдёте свои ошибки.
P.P.S. Ваша ошибка в понимании sig.update(resultDigest). Код будет работать, если clientTextPath = "C:\\certs\\sign\\client_text.txt.hash"; будет содержать хеш файла "C:\\certs\\sign\\client_text.txt". О чём вам и сказала Ольга. Другими словами, в CSP вы подписываете хеш, а не сам файл (на уровне криптографических объектов - хеш хеша), это логическая ошибка. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 26.05.2008(UTC) Сообщений: 23 Откуда: Москва
|
Во первых - спасибо за csptest -keys -hash GOST -in e:\text -hashout e:\text.hsh -verifycontext а по поводу кода - код тестовый, а не реальная программа. По поводу желания рыться в коде - мы ваши клиенты, и платим вам деньги из которых вам начисляется заработная плата, схема надеюсь понятна, поэтому у вас не может быть желания или нежелания - есть работа за которую мы вам платим. Спасибо за поддержку. Отредактировано пользователем 31 мая 2008 г. 0:53:50(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,431
Сказал(а) «Спасибо»: 37 раз Поблагодарили: 574 раз в 400 постах
|
Мы оказываем платную техническую поддержку по использованию наших продуктов, но не встраиванию. В дальнейшем по вопросам тех.поддержки обращайтесь в письменной форме с указанием номеров договоров и названием компании. Наши реквизиты указаны на сайте. Ваша учётная запись на форуме заблокирована за неуважительное поведение. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close