Проверка подписи doc-файла в KalkanCrypt на C#
(1 чел.) (1) гость
  • Страница:
  • 1

ТЕМА: Проверка подписи doc-файла в KalkanCrypt на C#

Проверка подписи doc-файла в KalkanCrypt на C# 2 года, 1 мес. назад #3266

  • VitaliyL
  • Новый участник
  • Постов: 6
  • Репутация: 0
Пытаемся настроить верификацию подписей файлов на стороне сервера на С#. Код верификации:

string inDataStr = System.IO.File.ReadAllText(@"C:\Users\Vitaliy\Desktop\doc1.docx");
string signedDataStr = "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";


string signResult = "";
string outData = " ";
string outVerifyInfo = " ";
string outCert = " ";
const KALKANCRYPTCOM_FLAGS flagsVerify =
    KALKANCRYPTCOM_FLAGS.KC_SIGN_CMS |
    KALKANCRYPTCOM_FLAGS.KC_OUT_PEM | 
    KALKANCRYPTCOM_FLAGS.KC_DETACHED_DATA | 
    KALKANCRYPTCOM_FLAGS.KC_IN_BASE64;

IKalkanCryptCOM kalkan = new KalkanCryptCOMLib.KalkanCryptCOM();
kalkan.Init();
if (kalkan.GetLastError() > 0)
    throw new CryptographicException("KalkanCrypt не инициализирован.");

 string errorStr = "";
 uint rv;

kalkan.VerifyData("", (int)flagsVerify, 0, inDataStr, signedDataStr, out outData, out outVerifyInfo, out outCert);

kalkan.GetLastErrorString(out errorStr, out rv);

Console.WriteLine(String.Format(" errorStr: {3}, outVerifyInfo: {1}, outData:{0}, outCert:{2}", outData, outVerifyInfo, outCert, errorStr));

Console.ReadKey();


В outVerifyInfo появляется: Verify - FAILED. error:2E09A09E:CMS routines:func(154):reason(158)

Подпись была получена через createCMSSignatureFromFile в веб-интерфейсе. Данный код работает для txt файлов. Я пытался считывать doc-файл вот так:
string inDataStr = Convert.ToBase64String(System.IO.File.ReadAllBytes(@"C:\Users\Vitaliy\Desktop\doc1.docx"));
Но так проверку тоже не проходит
Изменено: 2 года, 1 мес. назад от VitaliyL.

Re: Проверка подписи doc-файла в KalkanCrypt на C# 2 года назад #3271

  • stogzhan
  • Новый участник
  • Постов: 16
  • Репутация: 0
Здравствуйте!

При считывании док файла функцией ReadAllText Вы переменной inDataStr передаете непервоначальный текст. Возможно, теряется кодировка.

Re: Проверка подписи doc-файла в KalkanCrypt на C# 2 года назад #3281

  • VitaliyL
  • Новый участник
  • Постов: 6
  • Репутация: 0
Microsoft Word по умолчанию сохраняет в юникоде. Я попробовал все вариации юникода, ни с одной проверка не проходит. Подпись была получена через createCMSSignatureFromFile в NCALayer api, и успешно проходит проверку на crypto.kontur.ru/verify (при RSA подписи)
Может нужно как-то считывать байты, а не текст? Не все форматы файлов ведь текстовые.
Или нужно как-то использовать функцию формирования хеша в калкане?
  • Страница:
  • 1
FaLang translation system by Faboba