• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Проблема С Проверкой Подписи Через Capicom

  • Автор темы Allegro
  • Дата начала
A

Allegro

День добрый! У меня есть программа написанная на delphi 7, в ней производится подписание документов с помощью capicom. контент формируется следующим образом: SignedData.Content:=QryWhere.FieldByName('img2txt').AsVariant + DateToStr(sigDate);
после чего без проблем заверяется ЭЦП. и есть другая программа написанная на Embarcadero RAD Studio XE2 в которой производится проверка подписи следующим образом:
SignedData.Content:= VarToStr(ADOQ1.FieldByName('img2txt').AsVariant)+VarToStr(ADOQ1.FieldByName('DataSigA').AsString);
SignedData.Verify(Sig, true, 0);

при выполнении проверки вылетает неправильное значение Хеша.
Помогите пожалуйста реализовать грамотно проверку подписи, что бы не вылетало ошибок
 
S

sinkopa

День добрый! У меня есть программа написанная на delphi 7, в ней производится подписание документов с помощью capicom. контент формируется следующим образом: SignedData.Content:=QryWhere.FieldByName('img2txt').AsVariant + DateToStr(sigDate);
после чего без проблем заверяется ЭЦП. и есть другая программа написанная на Embarcadero RAD Studio XE2 в которой производится проверка подписи следующим образом:
SignedData.Content:= VarToStr(ADOQ1.FieldByName('img2txt').AsVariant)+VarToStr(ADOQ1.FieldByName('DataSigA').AsString);
SignedData.Verify(Sig, true, 0);

при выполнении проверки вылетает неправильное значение Хеша.
Помогите пожалуйста реализовать грамотно проверку подписи, что бы не вылетало ошибок
Я не экстрасенс и кто такой у Вас SignedData.Content могу только догадываться... но подозреваю лажа вот тут
Код:
 + VarToStr(ADOQ1.FieldByName('DataSigA').AsString);
Либо поле берите как тип variant: VarToStr(ADOQ1.FieldByName('DataSigA').AsVariant)
Либо функцию VarToStr использовать не нужно.
Код:
SignedData.Content:= VarToStr(ADOQ1.FieldByName('img2txt').AsVariant)+ADOQ1.FieldByName('DataSigA').AsString;
Правда если у компилятора включена оптимизация, такое Ваше "нахальство" он может и подправить тихонько.
Ну тогда подозреваю что дело в строковом типе.
В Delphi 7 тип string это AnsiString (однобайтные символы) а в XE2 string это WideString (два байта на один символ).
Т.е. при одинаковом строковом содержании (например строка "Привет ХиТРый;)") длина в байтах у нее будет разная (для XE2 в два раза длиннее чем в Delphi 7).
Соответственно функция считающая Хеш даст разные результаты.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!