Статус: Участник
Группы: Участники
Зарегистрирован: 24.05.2012(UTC) Сообщений: 15
|
Здравствуйте. Есть программа, которая использует функции Sharpei для подписания файлов. Проверка также производится функциями Sharpei, в другой программе. Всё хорошо, всё проверяется, все счастливы. Однако когда мы хотим проверить созданную подпись с cryptcp, возникает ошибка - 80091001. При проверке на http://notary.cryptopro.ru ошибка "Подлинность документа НЕ ПОДТВЕРЖДЕНА: не поддерживаемый формат электронного документа." Может ли быть такое, что в нашей программе неправильно происходит запись в файл подписи? Исходник прилагаю. http://rghost.ru/38347431
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
kazaza написал:Здравствуйте. Есть программа, которая использует функции Sharpei для подписания файлов. Проверка также производится функциями Sharpei, в другой программе. Всё хорошо, всё проверяется, все счастливы. Однако когда мы хотим проверить созданную подпись с cryptcp, возникает ошибка - 80091001. При проверке на http://notary.cryptopro.ru ошибка "Подлинность документа НЕ ПОДТВЕРЖДЕНА: не поддерживаемый формат электронного документа." Может ли быть такое, что в нашей программе неправильно происходит запись в файл подписи? Исходник прилагаю. http://rghost.ru/38347431 Цитата:
Однако когда мы хотим проверить созданную подпись с cryptcp, возникает ошибка - 80091001
0x80091001 Ошибка при обработке криптографического сообщения. Цитата: "Подлинность документа НЕ ПОДТВЕРЖДЕНА: не поддерживаемый формат электронного документа."
ЭЦП не в pkcs7 формате Код:
//Подписываем хеш
byte[] SignedHashValue = GostFormatter.CreateSignature(hashValue);
FileStream fileStl = new FileStream(SignatureFilePath, FileMode.OpenOrCreate,
FileAccess.ReadWrite, FileShare.ReadWrite);
fileStl.Write(SignedHashValue, 0, SignedHashValue.Length);
fileStl.Dispose();
myhash.Clear();
Цитата: CreateSignature Возвращаемое значение Подпись в виде байтового массива.
Отредактировано пользователем 29 мая 2012 г. 14:41:31(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.05.2012(UTC) Сообщений: 15
|
Да, она самая. Отчего она возникнуть может? Update: нет. Согласно коду, который я прикрепила, мы просто вычисляем хэш, подписываем его и записываем в файл. Update2: а как создать подпись в pkcs из того, что мы получили? Update3: нашла в примерах cms. Попробую и отпишусь, получилось или нет. Отредактировано пользователем 29 мая 2012 г. 14:47:10(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
kazaza написал:Да, она самая. Отчего она возникнуть может? Update: нет. Согласно коду, который я прикрепила, мы просто вычисляем хэш, подписываем его и записываем в файл. Update2: а как создать подпись в pkcs из того, что мы получили? КриптоПро Sharpei SDK : chm: Примеры\Примеры работы с форматом PKCS/CMS файлы: Crypto Pro\Sharpei SDK\Examples\simple\CMS\cs\ SingleSigner.cs и т.д. Отредактировано пользователем 29 мая 2012 г. 14:49:58(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.05.2012(UTC) Сообщений: 15
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 14.10.2011(UTC) Сообщений: 144 Поблагодарили: 31 раз в 30 постах
|
Судя по коду Вы отсоединенную подпись создаете Код:SignedCms signedCms = new SignedCms(contentInfo, true);
Тогда, чтобы ее проверить Вам нужно так проверку делать: Код:static bool VerifyMsg(Byte[] msg,
byte[] encodedSignature)
{
// Создаем объект ContentInfo по сообщению.
// Это необходимо для создания объекта SignedCms.
ContentInfo contentInfo = new ContentInfo(msg);
// Создаем SignedCms для декодирования и проверки.
SignedCms signedCms = new SignedCms(contentInfo, true);
// Декодируем подпись
signedCms.Decode(encodedSignature);
// Перехватываем криптографические исключения, для
// возврата о false значения при некорректности подписи.
try
{
// Проверяем подпись. В данном примере не
// проверяется корректность сертификата подписавшего.
// В рабочем коде, скорее всего потребуется построение
// и проверка корректности цепочки сертификата.
Console.Write("Проверка подписи сообщения ... ");
signedCms.CheckSignature(true);
Console.WriteLine("Успешно.");
}
catch (System.Security.Cryptography.CryptographicException e)
{
Console.WriteLine("Функция VerifyMsg возбудила исключение: {0}",
e.Message);
Console.WriteLine("Проверка PKCS #7 сообщения завершилась " +
"неудачно. Возможно сообщене, подпись, или " +
"соподписи модифицированы в процессе передачи или хранения. " +
"Подписавший или соподписавшие возможно не те " +
"за кого себя выдают. Достоверность и/или целостность " +
"сообщения не гарантируется. ");
return false;
}
return true;
}
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.05.2012(UTC) Сообщений: 15
|
Спасибо, программа работает корректно, проверка проходит. Однако при попытке проверить полученное сообщение с помощью cryptcp возникает та же ошибка: неправильная подпись. Не может ли это быть связано со строками: Код:Encoding unicode = Encoding.Unicode;
byte[] msgBytes = unicode.GetBytes(msg);
Зачем вообще мы используем Код:Encoding unicode = Encoding.Unicode;
? Отредактировано пользователем 31 мая 2012 г. 12:33:20(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 14.10.2011(UTC) Сообщений: 144 Поблагодарили: 31 раз в 30 постах
|
Покажите, как проверяете подпись cryptcp? Какую подпись проверяете (отделённую или присоединённую)?
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.05.2012(UTC) Сообщений: 15
|
cryptcp -vsignf test2.txt -f test2.txt.sgn test2.tx - исходный файл test2.txt.sgn - файл подписи Проверяем отделенную подпись.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 14.10.2011(UTC) Сообщений: 144 Поблагодарили: 31 раз в 30 постах
|
А в самой программе вы вычисляете подпись для файла test2.txt? То есть считываете байты из этого файла? Или, как в примере, подписываете какую-то строку, записываете подпись в файл test2.txt.sgn, а потом просто создаете файл test2.txt, в котором подписываемая строка содержится? |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close